慢查询日志介绍

MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的 SQL,则会被记录到慢查询日志中。

long_query_time的默认值为 10,意思是运行 10 秒以上的语句。 由他来查看哪些 SQL 超出了我们的最大忍耐时间值

比如一条 sql 执行超过 5 秒钟,我们就算慢 SQL,希望能收集超过 5 秒的 sql,结合explain进行全面分析。

默认情况下,MySQL 数据库没有开启慢查询日志,需要我们手动来设置这个参数。

如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件。

查看及开启

默认情况下slow_query_log的值为OFF

1
SHOW VARIABLES LIKE '%slow_query_log%';

命令行开启:

1
set global slow_query_log=1;

查看默认的慢查询日志记录 long_query_time 时间,10 秒。

1
2
SHOW VARIABLES LIKE '%long_query_time%';
SHOW GLOBAL VARIABLES LIKE 'long_query_time';

SHOW VARIABLES LIKE '%long_query_time%'; 显示的是当前会话级别的变量值,仅针对当前连接的数据库会话有效。

SHOW GLOBAL VARIABLES LIKE 'long_query_time'; 显示的是全局级别的变量值,对于所有的连接和会话都有效。

注意: 运行时间正好等于 long_query_time 的情况,并不会被记录下来。

修改全局级别的慢查询记录时间为5秒

1
SET GLOBAL long_query_time=5;

修改配置文件使永久生效

修改 /etc/my.cnf 文件

[mysqld]下增加如下参数,然后重启 MySQL 服务。

1
2
3
4
5
6
7
8
# 开启服务
slow_query_log =1
# 日志位置
slow_query_log_file=/var/lib/mysql/slow.log
# 阀值(秒)
long_query_time=3
# 输出文件类型
log_output=FILE

查询当前系统中有多少条慢查询记录

1
SHOW GLOBAL STATUS LIKE '%Slow_queries%';