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)

相关推荐
音乐宝贝家2 小时前
户外演出时吉他实际音量、音质等表现数据究竟如何?
数据库·新媒体运营·媒体·材质·内容运营
码不停蹄的玄黓2 小时前
MySQL慢SQL瓶颈定位
sql·mysql
iiiiyu2 小时前
IO流相关编程题
java·大数据·开发语言·数据结构·数据库·mysql
AIOps打工人2 小时前
数据库运维工具选型 2026 横评:dbskiter vs MySQL Workbench vs percona_toolkit vs Navicat
运维·数据库·mysql
这个DBA有点耶2 小时前
核心系统的高可用与容灾架构:从主从到两地三中心全面解析
java·开发语言·数据库·sql·mysql·架构·运维开发
是店小二呀2 小时前
零门槛快速接入主流大模型:基于 AI Ping 平台一键集成 GLM-5.1 与多场景应用深度实战
大数据·数据库·人工智能
asdfg12589632 小时前
BeanListHandler的通俗理解
java·数据库·oracle
KaMeidebaby3 小时前
卡梅德生物技术快报|羊驼免疫:分子生物学实战:基于羊驼免疫的重链抗体制备与全流程验证方案
前端·网络·数据库·人工智能·算法·百度
jieyucx3 小时前
数据库专题开篇:零基础迈入 MySQL 的第一步
数据库·mysql