MySQL的INNODB引擎性能优化总结二

https://www.roamway.com/?p=421中我们分析了mysql性能优化前半部分,今天接着分析后半部分。

9.查询缓存(query cache): 通过执行show global status like ‘qcache%’; 可以得到查询缓存的情况,如下:

如果这些项目的值都为0

说明配置文件中没有设置查询缓存,请打开配置文件,然后在[mysqld]字段中配置

query_cache_type = 1

query_cache_size = x

(1表示启用查询缓存,0表示关闭查询缓存),保存退出,重启mysql.

再次执行show global status like ‘qcache%’; 可以看到各项指标有值了。

分析: 如果Qcache_lowmem_prunes的值很大,且free_memory很小,说明查询缓存内存不足,需要

增加query_cache_size的值,如32M,64M或128M等,根据需求而定。 如果Qcache_lowmem_prunes的

值很大,free_blocks也不小,且free_memory很充足,说明碎片太多,执行FLUSH QUERY CACHE 会

对缓存中的碎片进行整理。

总之,要将Qcache_lowmem_prunes维持在0或一个非常小的值。

通过以下几个值可以得知查询缓存的健康状况.

缓存碎片率

Qcache_free_blocks / Qcache_total_blocks * 100%< 20%

缓存利用率

(query_cache_size – Qcache_free_memory) / query_cache_size * 100%越高越好

缓存命中率

(Qcache_hits – Qcache_inserts) / Qcache_hits * 100% 越高越好

10.Innodb_buffer_pool 命中率:执行show status like ‘Innodb_buffer_pool_%’;

计算缓冲池命中率,命中率要大于99.9%

innodb_buffer_read_hits = (1 – innodb_buffer_pool_reads /

innodb_buffer_pool_read_requests) * 100%

如果发现innodb_buffer_pool_pages_free 为0,或者innodb_buffer_pool_pages_free占

innodb_buffer_pool_pages_total的比例太小(比如不到30%),就必须增加

innodb_buffer_pool_size的值。

11.表扫描率:执行show global status like ‘handler_read%’;和

show global status like ‘com_select’;

如果表扫描率 = Handler_read_rnd_next / Com_select的值大于4000

说明执行了太多的表扫描,有可能索引没有建好,增加read_buffer_size

值会有一些好处,比如2M,4M等,但最好不要超过8MB ,另外需要检查sql语句,

做好适当调整。

12.慢查询:执行show variables like ‘%slow%’;

可以看到慢查询日志功能是否开启,如果开启还能看到具体路径。

执行show global status like ‘%slow%’; 显示执行了多少次慢查询,通过慢查询日志,

可以知道哪些SQL语句有问题。

Leave a Reply