MySQL 慢查询日志 核心参数详解

分两类:日志字段(日志内容里的指标) 、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。
  • 主从架构专用,排查从库延迟。

三、高频组合判断(直接套用排查瓶颈)

  1. Query_time 大 + Lock_time 小 + Rows_examined 极大
    → 全表扫描/索引缺失/索引失效
  2. Query_time 大 + Lock_time 占比很高
    → 锁等待、长事务、行锁升级表锁
  3. Rows_examined 大、Rows_sent 很小
    → 过滤效率极低,索引设计不合理
  4. Rows_sent 巨大
    → 未分页、select *,结果集过大
  5. 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)

相关推荐
小白男神3 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客3 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安3 天前
MySQL-触发器
数据库·mysql