当前位置: 移动技术网 > IT编程>数据库>Mysql > 优化mysql之key_buffer_size设置

优化mysql之key_buffer_size设置

2017年12月12日  | 移动技术网IT编程  | 我要评论

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得知详情。
对于1g内存的机器,如果不使用myisam表,推荐值是16m(8-64m)

提升性能的建议:
1.如果opened_tables太大,应该把my.cnf中的table_cache变大
2.如果key_reads太大,则应该把my.cnf中key_buffer_size变大.可以用key_reads/key_read_requests计算出cache失败率
3.如果handler_read_rnd太大,则你写的sql语句里很多查询都是要扫描整个表,而没有发挥键的作用
4.如果threads_created太大,就要增加my.cnf中thread_cache_size的值.可以用threads_created/connections计算cache命中率
5.如果created_tmp_disk_tables太大,就要增加my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的 


mysql优化小案例:key_buffer_size
key_buffer_size是对myisam表性能影响最大的一个参数,下面一台以myisam为主要存储引擎服务器的配置:

mysql> show variables like '%key_buffer_size%';
  
下面查看key_buffer_size的使用情况:

mysql> show global status like '%key_read%';
+-------------------+-----------------+
| variable_name     | value           |
+-------------------+-----------------+
| key_read_requests | 2454354135490   |
| key_reads         | 23490           |
+-------------------+-----------------+
2 rows in set (0.00 sec)
一共有key_read_requests个索引请求,一共发生了key_reads次物理io

key_reads/key_read_requests ≈ 0.1%以下比较好。

key_buffer_size设置注意事项

1.单个key_buffer的大小不能超过4g,如果设置超过4g,就有可能遇到下面3个bug:

http://bugs.mysql.com/bug.php?id=29446

http://bugs.mysql.com/bug.php?id=29419

http://bugs.mysql.com/bug.php?id=5731

2.建议key_buffer设置为物理内存的1/4(针对myisam引擎),甚至是物理内存的30%~40%,如果key_buffer_size设置太大,系统就会频繁的换页,降低系统性能。因为mysql使用操作系统的缓存来缓存数据,所以我们得为系统留够足够的内存;在很多情况下数据要比索引大得多。

3.如果机器性能优越,可以设置多个key_buffer,分别让不同的key_buffer来缓存专门的索引

上面只是对"新手"来说的,我们还可以更深入地优化key_buffer_size,使用"show status"来查看", ,   以及 ",以调整到更适合你的应用的大小,key_reads/key_read_requests的大小正常情况下得小于0.01

参考资料:

http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_key_buffer_size

根据上述情况移动技术网小编把key_buffer_size设置为2048m解决了问题。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网