Zusammenfassung zwei der INNODB-Engine-Leistungsoptimierung von MySQL
existierenhttps://www.roamway.com/?p=421中我们分析了mysql性能优化前半部分,Heute werde ich die zweite Hälfte analysieren。
9.Cache abfragen(Abfrage-Cache): Durch Ausführen von show global status wie "qcache%"; Kann den Abfrage-Cache erhalten,wie folgt:
如果这些项目的值都为0
说明配置文件中没有设置查询缓存,Bitte öffnen Sie die Konfigurationsdatei,Dann in[mysqld]字段中配置
query_cache_type = 1
query_cache_size = x
(1Gibt an, dass der Abfragecache aktiviert ist,0Gibt an, dass der Abfragecache deaktiviert ist),Speichern und schließen,Starten Sie MySQL neu.
Führen Sie erneut den globalen Status wie "qcache%" aus; Sie können sehen, dass die Indikatoren Wert haben。
Analyse: 如果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语句有问题。