慢查询日志,顾名思义,就是查询慢的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志。该日志能为SQL语句的优化带来很好的帮助。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。
慢查询基本配置
slow_query_log
启动停止慢查询日志。
slow_query_log_file
指定慢查询日志得存储路径及文件(默认和数据文件放一起)。
long_query_time
指定记录慢查询日志SQL执行时间得阈值(单位:秒,默认10秒)。
log_queries_not_using_indexes
是否记录未使用索引的SQL。
log_output
日志存放的地方【TABLE】【FILE】【FILE,TABLE】。
配置了慢查询后,它会记录符合条件的SQL。包括:
- 查询语句
- 数据修改语句
- 已经回滚得SQL
show VARIABLES like '%slow_query_log%'
show VARIABLES like '%slow_query_log_file%'
show VARIABLES like '%long_query_time%'
show VARIABLES like '%log_queries_not_using_indexes%'
show VARIABLES like 'log_output'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
开启慢查询
MySQL的慢查询日志功能,默认是关闭的,需要手动开启。
临时开启慢查询功能
在 MySQL 执行 SQL 语句设置,但是如果重启 MySQL 的话将失效。
查看是否开启慢查询功能
show VARIABLES like '%slow_query_log%'
- 1
开启慢查询与设置超时参数
set global slow_query_log = ON;
set global long_query_time = 1;
- 1
- 2
永久开启慢查询功能
修改/etc/my.cnf配置文件,重启 MySQL, 这种永久生效。
[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
- 1
- 2
- 3
- 4
慢查询日志解读
从慢查询日志里面摘选一条慢查询日志,数据组成如下:
# Time: 190512 18:46:25
# User@Host: root[root] @ [202.105.151.121] Id: 16869
# Query_time: 14.436060 Lock_time: 0.000102 Rows_sent: 238 Rows_examined: 238
use pmcenter;
SET timestamp=1557657985;
select * from `pmcenter`.`sys_operation_log` limit 0,1000;
- 1
- 2
- 3
- 4
- 5
- 6
格式说明:
第一行:SQL查询执行的时间。
第二行:执行SQL查询的连接信息,用户名 、用户的IP信息、线程ID号。
第三行:记录了一些我们比较有用的信息,如下。
- Query_time,这条SQL执行的时间,越长则越慢;
- Lock_time,在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间;
- Rows_sent,查询返回的行数;
- Rows_examined,查询检查的行数,越长就当然越费时间。
第四行,应用的数据库。
第五行,设置时间戳,没有实际意义,只是和第一行对应执行时间。
第六行,及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。