查询日志与慢查询日志
查询日志记录客户端的所有操作语句,默认关闭;慢查询日志记录执行超时且扫描行数达到阈值的 SQL,是定位慢 SQL 的主要入口。
一、查询日志
- 查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的 SQL 语句。
- 默认情况下,查询日志是未开启的。
-- 查看查询日志状态与文件位置
SHOW VARIABLES LIKE 'general%';
| 参数 | 默认值 | 含义 |
|---|---|---|
general_log | OFF | 是否开启查询日志 |
general_log_file | /var/lib/mysql/localhost.log | 日志文件位置 |
开启方式:修改 MySQL 配置文件 /etc/my.cnf,添加如下内容后重启服务:
# 该选项用来开启查询日志,可选值:0 或者 1;0 代表关闭,1 代表开启
general_log=1
# 设置日志的文件名,如果没有指定,默认的文件名为 host_name.log
general_log_file=mysql_query.log
查询日志会记录每一条语句,开销较大,一般只在排查问题时临时开启。
二、慢查询日志
2.1 介绍
慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于 min_examined_row_limit 的所有 SQL 语句的日志。
- 默认未开启。
long_query_time默认为 10 秒,最小为 0,精度可以到微秒。
# 慢查询日志
slow_query_log=1
# 执行时间参数
long_query_time=2
2.2 记录范围控制
默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以通过以下参数更改:
# 记录执行较慢的管理语句
log_slow_admin_statements=1
# 记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1
2.3 查看与验证
-- 是否开启、阈值、日志文件位置
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';
-- 运行时开启(重启失效,永久生效需改配置文件)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;
-- 查看慢查询条数
SHOW GLOBAL STATUS LIKE 'Slow_queries';
速查
-- 查询日志:状态 / 文件
SHOW VARIABLES LIKE 'general%';
-- 慢查询日志:状态 / 阈值 / 文件
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'slow_query_log_file';
-- 运行时开启慢查询(重启失效)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;
-- 慢查询累计条数
SHOW GLOBAL STATUS LIKE 'Slow_queries';
# /etc/my.cnf:查询日志
general_log=1
general_log_file=mysql_query.log
# /etc/my.cnf:慢查询日志
slow_query_log=1
long_query_time=2
log_slow_admin_statements=1
log_queries_not_using_indexes=1
| 要做什么 | 用什么 |
|---|---|
| 记录客户端所有语句 | general_log=1(开销大,临时开启) |
| 找出执行慢的 SQL | slow_query_log=1 + long_query_time |
| 连未走索引的慢 SQL 也记 | log_queries_not_using_indexes=1 |
| 让配置永久生效 | 写入 /etc/my.cnf 后重启 |
相关
- 错误日志与二进制日志:错误日志、binlog 的格式与清理
- SQL 性能分析:慢查询日志之后的 profile 与
EXPLAIN - 索引使用:
log_queries_not_using_indexes抓到的未走索引 SQL