MySQL 慢查询日志(Slow Query Log)完全梳理
慢查询日志是 MySQL 性能优化的核心入口之一。几乎所有线上问题、SQL 优化、索引缺失或超时排查,第一步通常都是查看慢查询日志。
下面从零到实战,把慢查询日志相关的核心知识点梳理清楚。
什么是慢查询日志?
简单来说,MySQL 会把执行时间超过某个阈值的 SQL 记录到日志文件里,这个阈值就是 long_query_time。
记录的内容通常包括:
- 执行时间
- 锁等待时间
- 返回的行数
- 扫描的行数
- 执行的完整 SQL
- 执行用户、IP、数据库名
- 是否使用了索引(using index / using filesort / using temporary)
核心参数
| 参数名 | 作用 | 默认值 | 推荐线上值 | 修改方式 |
|---|---|---|---|---|
| slow_query_log | 是否开启慢查询日志 | OFF | ON | 全局动态 |
| slow_query_log_file | 慢查询日志文件路径 | 主机名-slow.log | 自定义路径 | 全局动态 |
| long_query_time | 超过多少秒算慢查询 | 10 秒 | 0.5~2 秒(视业务) | 全局动态 |
| log_queries_not_using_indexes | 是否记录未使用索引的查询 | OFF | 建议开(排查利器) | 全局动态 |
| min_examined_row_limit | 扫描行数少于此值的不记录 | 0 | 一般不动 | 全局动态 |
| log_output | 日志输出方式(FILE / TABLE) | FILE | FILE 或 TABLE | 全局动态 |
生产环境推荐配置组合:
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1; -- 1 秒以上算慢
SET GLOBAL log_queries_not_using_indexes = 1; -- 没走索引的都记
SET GLOBAL slow_query_log_file = ;

