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)

相关推荐
广州灵眸科技有限公司4 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒6 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手6 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学7 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh9 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户71333585156249 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898610 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD10 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo10 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
用户713335851562410 小时前
MySQL - InnoDB 的 Buffer Pool
mysql