MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。
日志记录的是已经执行完毕的语句,对于相应时间超过阈值但未执行完毕的语句,日志中是看不到的。
但可以通过 show processlist 命令来显示正在执行的语句

具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。
long_query_time的默认值为10,意思是记录运行10秒以上的语句。

默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。
当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。
慢查询日志支持将日志记录写入文件和数据库表。

相关命令

1)slow_query_log
查看慢查询是否开启,1表示开启,0表示关闭。

  1. show VARIABLES LIKE 'slow_query_log';

2)slow-query-log-file
MySQL数据库慢查询日志存储路径
可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

  1. show VARIABLES LIKE 'slow-query-log-file';

3)long_query_time
慢查询阈值,当查询时间多于设定的阈值时,记录到日志。

  1. show VARIABLES LIKE 'long_query_time';

日志分析

MySQL提供的mysqldumpslow工具
得到返回记录集最多的10个SQL

  1. mysqldumpslow -s r -t 10 /database/mysql/mysql06_slow.log

得到访问次数最多的10个SQL

  1. mysqldumpslow -s c -t 10 /database/mysql/mysql06_slow.log

pt-query-digest工具(自行安装)