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语句有问题

Hinterlasse eine Antwort