MySQL慢查询日志 – Slow Query Log

The Slow Query Log,也就是MySQL的慢查询日志,其记录了执行时间超过设定值的SQL,也可以记录不使用索引的SQL语句。慢查询日志,能够帮助DBA快速锁定性能异常的SQL语句,然后进行优化工作,以保障MySQL数据库的正常运行。

慢查询日志记录了两部分SQL:
1、SQL查询时间超过变量 long_query_time 设定值,默认10秒。
2、SQL返回行数大于 min_examined_row_limit 设定值,默认是0.

慢查询日志可以记录在文件和表中:
1、文件:long_query_time 值包含毫秒;
2、表:long_query_time只能包含秒,毫秒部分自动忽略。

开启慢查询日志后,还要设定log_output变量决定将慢查询日志写到表中还是文件中。log_output由三种值TABLE、FILE和NONE,对应着表、文件和啥都不写。

默认情况,管理类的SQL语句、不使用索引的SQL语句都不会被记录。 log_slow_admin_statements 和 log_queries_not_using_indexes两个变量决定了是否能记录前面提到的情况。

log_slow_admin_statements :动态可修改变量,默认值OFF。它决定了慢查询日志是否记录管理类的SQL语句,管理类SQL语句包含:ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE。

log_queries_not_using_indexes:动态可修改变量,默认值OFF。如果设为ON,那么不使用索引的SQL会被记录到慢查询日志中。开启后,慢查询日志可能会增长的很快,可以设定 log_throttle_queries_not_using_indexes 变量来限制,其默认值是0,也就是不限制。如果值大于0,如log_throttle_queries_not_using_indexes=100,则每秒钟记录100条不使用索引的SQL语句到慢查询日志。

开启慢查询日志:
MySQL默认不开启慢查询日志,开启请设置
slow_query_log=1;

慢查询日志的命名:
默认值为host_name-slow.log。该变量同样可以设置慢查询日志路径
slow_query_log_file=xxx.log

如果设定了–log-short-format变量,那么慢查询日志记录的内容较少。

MySQL的从库默认不记录慢查询,开启需设定 log_slow_slave_statements 变量。

MySQL 5.6.3如何慢SQL中包含密码信息,会以文本形式直接记录到慢查询日志中。5.6.3之后,SQL语句中的密码信息不回写入到慢查询,更加安全。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注