分两类:日志字段(日志内容里的指标) 、MySQL 配置参数(控制慢日志行为),结合实战判断瓶颈,附解读和使用场景。
一、慢日志文件里的日志字段(最常用,分析SQL耗时必看)
单条慢日志标准格式节选:
# Time: 2026-06-11T10:20:30.123456
# User@Host: root[root] @ localhost [] Id: 1234
# Query_time: 3.200123 Lock_time: 0.100000 Rows_sent: 10 Rows_examined: 120000
SET timestamp=1718086830;
SELECT * FROM user WHERE name LIKE '%test%';
1. Query_time(最重要)
- 含义:SQL 总执行耗时,单位:秒(精确到微秒)
- 判定:超过
long_query_time阈值才会被记录 - 作用:判断这条SQL本身是不是真的慢
2. Lock_time(锁等待时间)
- 含义:等待行锁/表锁的耗时,单位:秒
- 场景区分:
- Lock_time 占 Query_time 比例很高 → 瓶颈是锁竞争、事务过长
- Lock_time 很小 → 慢是SQL本身执行/索引问题
3. Rows_examined(扫描行数,核心)
- 含义:MySQL 实际读取、遍历的总行数
- 关键判断:
- 数值巨大 = 全表扫描/索引失效、索引区分度差
- 优化目标:尽量让该值越小越好
4. Rows_sent(返回行数)
- 含义:最终返回给客户端的行数
- 搭配判断:
Rows_examined ≫ Rows_sent:扫描大量无效数据,索引严重不合理- Rows_sent 超大:一次性返回过多数据,网络传输、客户端解析压力大
5. Rows_affected(影响行数,DML语句才有)
- 含义:
UPDATE/DELETE/INSERT实际修改的行数 - 多用于分析批量更新、删除慢SQL。
6. Time
- 日志记录时间:SQL 执行完成的时间点,用于定位哪个时间段业务卡顿。
7. User@Host + Id
- 执行账号、来源IP、线程ID;
- 配合
show processlist追溯现场会话。
8. timestamp
- 时间戳,SQL 执行时的系统时间。
二、MySQL 慢日志配置参数(控制是否记录、记录规则)
执行 show variables like 'slow_query%'; show variables like 'long_query_time'; 可查看。
1. slow_query_log
- 取值:
ON / OFF - 作用:慢查询日志总开关
- 线上建议:常态开启,方便问题追溯。
2. slow_query_log_file
- 作用:慢日志文件路径+文件名
- 用途:定位日志文件位置,供
mysqldumpslow/pt-query-digest分析。
3. long_query_time(超时阈值)
- 单位:秒(支持小数,如 0.5)
- 含义:SQL 执行时间超过该值才记录为慢SQL
- 线上经验:
- 普通业务:
1秒 - 高并发/核心接口:
0.5秒 - 调试排查:可设
0记录所有SQL。
- 普通业务:
4. log_queries_not_using_indexes
- 取值:
ON / OFF - 作用:强制记录 未使用索引 的SQL(哪怕没超时)
- 重点:线上排查索引问题必开,很多SQL耗时短但全表扫描,并发后必炸。
5. log_throttle_queries_not_using_indexes
- 作用:限制无索引SQL每分钟记录条数,防止日志刷爆磁盘。
- 场景:高并发下大量全表扫描,避免日志文件无限膨胀。
6. min_examined_row_limit
- 含义:最小扫描行数;
- 规则:扫描行数小于该值的SQL,就算超时也不记录。
- 用途:过滤掉小表、极小结果集的误报慢SQL。
7. log_slow_admin_statements
- 作用:是否记录
ALTER/CREATE/DROP等管理类SQL。 - 运维场景:DDL慢、表结构变更卡顿开启。
8. log_slow_slave_statements
- 作用:从库是否记录主库同步过来的慢SQL。
- 主从架构专用,排查从库延迟。
三、高频组合判断(直接套用排查瓶颈)
- Query_time 大 + Lock_time 小 + Rows_examined 极大
→ 全表扫描/索引缺失/索引失效 - Query_time 大 + Lock_time 占比很高
→ 锁等待、长事务、行锁升级表锁 - Rows_examined 大、Rows_sent 很小
→ 过滤效率极低,索引设计不合理 - Rows_sent 巨大
→ 未分页、select *,结果集过大 - SQL耗时短,但被日志记录
→ 开启了log_queries_not_using_indexes,属于无索引SQL
四、精简速记(面试/日常排查)
日志核心4字段 :
Query_time(总耗时)、Lock_time(锁等待)、Rows_examined(扫描行)、Rows_sent(返回行)
配置核心4参数 :
slow_query_log(开关)、long_query_time(超时阈值)、slow_query_log_file(日志路径)、log_queries_not_using_indexes(记录无索引SQL)