我们可以采用几种方法来查找慢查询。
最好的开始方法是通过将 slow_query_log 服务器选项添加到服务器启动或者选项文件来启用慢查询日志。
我们还需要设置 long_query_time 来过滤哪些查询很慢。
这会将慢查询以及执行它们所花费的时间记录到 MySQL 服务器数据目录中的 [hostname]-slow.log。
如果我们有大量慢查询,我们可以从较高的值开始,这将显示最慢的查询并逐渐减少设置,直到我们对结果感到满意为止。
我们还可以启用 log_queries_not_using_indexes 选项,该选项将记录执行全表扫描的查询。
其中一些查询是正常的。
但是,我们可能希望查看这些,因为它们通常是导致性能问题的原因。
我们还可以使用 mysqldumpslow 实用程序来解析慢查询日志并汇总所有类似的查询。
如果我们有许多慢查询,此实用程序特别有用。
除了慢查询日志,我们可能还想使用“SHOW PROCESSLIST SQL”语句查看进程列表。
有时我们会看到一个非常次优的查询,一个永远不会完成的查询。
此类永远不会完成的查询永远不会在慢查询日志中注册,有时会运行数周直到服务器重新启动。
我们还应该检查进程列表并查找经常出现的任何查询。
这些可能足够快而不会在慢查询日志中注册,但也足够频繁以耗尽服务器资源。
一旦我们发现了优化的候选者,就可以使用“EXPLAIN SQL”语句来查看特定查询是否以最佳方式执行。
参考
https://dev.mysql.com/doc/en/server-system-variables.html#sysvar_log_queries_not_using_indexes
https://dev.mysql.com/doc/en/slow-query-log.html
https://dev.mysql.com/doc/en/server-system-variables.html#sysvar_long_query_time
https://dev.mysql.com/doc/en/show-processlist.html
https://dev.mysql.com/doc/en/explain.html
https://dev.mysql.com/doc/en/server-system-variables.html#sysvar_slow_query_log