网站制作学习网经验与学习→正文:mysql优化之旅 1
字体:

mysql优化之旅 1

经验与学习 2015/6/27 11:56:56  点击:不统计

<网f站o学a习s制p作.cn>
 看了网上很多的mysql优化的例子,我在这里摘抄总结一下

 
1.max_connections
参数说明:MySQL的最大连接数,增加该值增加mysqld 要求的文件描述符的数量。如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。数值过小会经常出现ERROR 1040: Too many connections错误,可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
 
查看当前max_connections参数状况
mysql>show variables like ‘max_connections' 最大连接数
mysql>show  status like ‘max_used_connections' 目前系统出现最大使用的连接数
 
最佳设置  max_used_connections / max_connections * 100% (理想值≈ 85%) 
 
如何修改
(1) 在配置文件中添加 [mysqld] max_connections = number
(2) 在命令行中运行  set GLOBAL max_connections=1000;
 
2.back_log
参数说明:TCP/IP连接队列的最大值。当MySQL同时有大量连接请求的时候,MySQL会尝试用当前现有的线程处理这些请求,如果处理不过来,MySQL会把连接先放到一个队列里面,然后起新的线程处理。这个过程会很快, 但是并发请求很多的话,需要调高这个值,否则新来的连接请求会被拒绝。在一次压测的时候发现客户端返回大量的“Lost connection to MySQL”, 就是因为back_log的默认值太小导致的。增大这个值会增大CPU负载并消耗更多的内存。默认值:50
 
查看当前back_log参数状况:
mysql>show variables like 'back_log';
 
最佳设置  当观察你主机进程列表(mysql> show full processlist),发现大量264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大back_log 的值了。
 
如何修改:
(1)配置文件 [mysqld]   back_log=10
 
 
3. interactive_timeout
参数说明 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。。 默认数值是28800,可调优为7200。 (forasp.cn原创整理)
 
查看当前interactive_timeout 参数状况
 mysql> show variables like 'interactive_timeout';
最佳设置: 这个网上建议7200 
 
如何修改
(1) 修改配置文件 [mysqld] 添加或者修改interactive_timeout = 7200;
(2) 命令行修改 set GLOBAL interactive_timeout = 7200;//这种设置重启后失效。
 
4.wait_timeout
参数说明  服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)
查看wait_timeout 的参数状况
mysql> show variables like "wait_timeout";
最佳设置 这个根据自身情况,一般10-100都可以
 
如何修改
(1) 修改配置文件 [mysqld]  wait_timeout=100
 
 
4.key_buffer_size
参数说明  key_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。
 
查看key_buffer_size 参数状况
 mysql>show variables like 'key_buffer_size';//这里是配置状况
 mysql>show global status like 'key_read%';//这里是使用状况
 
 最佳设置 key_cache_miss_rate =Key_reads / Key_read_requests * 100%,设置在1/1000左右较好;对于1G内存的机器,如果不使用MyISAM表,推荐值是16M(8-64M)
 
 如何修改
 (1) 修改配置文件 [mysqld]  key_buffer_size=16M
 
 5.record_buffer_size
 参数说明每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。
 
 查看record_buffer_size参数状况
 mysql> show variables like 'record_buffer_size';
 
 最佳设置: 默认数值是131072(128K),我把它改为16773120 (16M) 
 
 如何修改  这个目前不清楚
 
 6. query_cache_size
  参数说明 主要用来缓存MySQL中的ResultSet,也就是一条SQL语句执行的结果集,所以仅仅只能针对select语句。默认32M
   
  查看参数状况
 mysql>  show global status like 'qcache%';
 
 最佳设置:
查询缓存碎片率= Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过20%,可以用FLUSH QUERY CACHE整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
查询缓存利用率= (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
查询缓存利用率在25%以下的话说明query_cache_size设置的过大,可适当减小;查询缓存利用率在80%以上而且Qcache_lowmem_prunes > 50的话说明query_cache_size可能有点小,要不就是碎片太多。
查询缓存命中率= (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
修改参数 则直接在配置文件中修改即可。

%77w%77%2E%66%6F%72%61%73%70%2E%63%6E

·上一篇:qps/tps 性能测试 >>    ·下一篇:javascript 跨域调用数据jsonp >>
推荐文章
最新文章