首页/数据/SQL 速查/慢查询日志开启与查看
性能与执行计划72 条

慢查询日志开启与查看

把执行时间超过 long_query_time 的语句记入日志文件:定位慢 SQL 的常规入口,可加开关同时记录未使用索引的语句。

SQL 速查数据更新于 2026-10-13

慢查询日志是什么

MySQL 把执行时间超过 long_query_time 的语句记进日志文件,是定位慢 SQL 的常规入口。它可以运行时开关,也可以写进配置文件持久化;开启“记录未使用索引的语句”之后日志量会明显增加。

基本信息

核心参数slow_query_log 开关、slow_query_log_file 路径、long_query_time 阈值
阈值单位秒,支持小数,例如 0.5 表示 500 毫秒
未使用索引log_queries_not_using_indexes,日志量会显著上升
噪音过滤min_examined_row_limit 过滤扫描行数过少的语句
生效范围SET GLOBAL 重启后失效,可用 SET PERSIST 或写配置文件
分析工具mysqldumpslow 做汇总,或用 pt-query-digest 深度分析

运行时开启

运行时开启
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1;                 -- 单位秒,可带小数
SET GLOBAL log_queries_not_using_indexes = ON;  -- 未使用索引的语句也记录
SHOW VARIABLES LIKE 'slow_query_log%';          -- 确认开关与日志文件路径
SHOW VARIABLES LIKE 'long_query_time';          -- 确认当前阈值

配置文件持久化

配置文件持久化
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
min_examined_row_limit = 100

参数与取值

参数含义常见取值
slow_query_log是否开启1 开启,0 关闭
long_query_time超过该秒数即记录生产常用 0.5 到 2
log_queries_not_using_indexes记录未走索引的语句调试期开启,长期开启会淹掉日志
min_examined_row_limit扫描行数低于该值不记录常设 100,过滤小结果集噪音
slow_query_log_file日志文件路径按磁盘容量选择挂载点

典型使用场景

  • 定位线上慢 SQL:先拿到阈值以上的语句清单
  • 上线前评估:新功能上线后复查是否引入新的慢查询
  • 索引优化前后对比:观察慢查询数量是否下降
  • 容量规划:分析大表扫描的出现频率
  • 排查某个接口变慢:按时间窗去日志里找对应语句
  • 审计异常 SQL:找出高频且没走索引的语句
long_query_time 支持小数,压测阶段可以临时设成 0.1 秒把大部分语句都记下来,排查完再调回正常值。阈值越小日志增长越快,磁盘空间要留足。
长期开启未使用索引的记录会显著增加日志量与磁盘写入,高峰期可能反过来拖慢实例。建议配合 min_examined_row_limit 过滤小结果集,或只在排查期开启。

易错点

  • 只 SET GLOBAL 不改配置文件:实例重启后开关丢失,问题复现时才发现日志根本没开
  • 阈值设得过小:日志快速增长挤占磁盘并增加写入压力,排查完要及时调回
  • 找不到日志文件:开启后先 SHOW VARIABLES 确认实际路径,不同安装方式的默认目录不同
  • 以为慢日志能覆盖所有问题:锁等待、临时表这类问题未必超过阈值,还要配合执行计划与性能视图

数据来源与参考

  • MySQL 8.0 Reference Manual §5.4.5 The Slow Query Log
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌