首页/数据/SQL 速查/mysqldumpslow 汇总慢日志
性能与执行计划72 条

mysqldumpslow 汇总慢日志

把慢日志按语句模板聚合排序:日志很大时先找出现次数多、总耗时高的模板,再回日志核对具体参数。

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

工具做什么

mysqldumpslow 是 MySQL 自带的慢日志聚合工具:它把日志里的语句按模板归一化(数字折叠成 N、字符串折叠成 S),再按次数或耗时排序输出。适合日志很大、先要「找出高频高耗模板」的场景。它是命令行脚本,直接读文件,不连数据库。

基本信息

适用平台MySQL 自带,随客户端套件安装
语法mysqldumpslow [选项] 慢日志路径
排序-s t/c/at/l/r:总耗时/次数/平均耗时/锁时间/返回行数
条数-t N 只输出前 N 条
过滤-g 按模式匹配语句文本

典型使用场景

  • 日志几 GB 时先看总耗时最高的模板,锁定优化目标
  • 按出现次数排序,找出被高频调用的短查询
  • 按锁时间排序,判断问题是扫描慢还是锁竞争
  • 只筛 SELECT 语句或某张表相关的语句
  • 上线前后分别跑一次,对比模板分布变化

常用命令

常用命令
# 按总耗时排序取前 10 条模板
mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

# 按出现次数排序:找高频小查询
mysqldumpslow -s c -t 10 /var/log/mysql/slow.log

# 只看 SELECT 语句
mysqldumpslow -s t -t 10 -g 'SELECT' /var/log/mysql/slow.log

# 多个日志文件一起分析,按平均耗时排序
mysqldumpslow -s at -t 20 /var/log/mysql/slow.log.1 /var/log/mysql/slow.log

输出逐列读法

字段含义怎么用
Count模板累计出现次数次数高的优先优化,收益面最大
Time按 -s 选定口径的累计时间总量大说明值得投入优化
Lock等待锁的总时间偏高说明是锁竞争而非扫描慢
Rows平均返回或影响行数与预期结果对比,找异常放大
语句模板N/S 占位的形式换回真实参数后再复现
归一化让同类语句聚合统计,代价是参数被折叠成占位符。需要精确样本时回慢日志里找原始语句,或改用 pt-query-digest 看分位数与明细。
工具只分析已经记录到慢日志的语句:slow_query_log 未开启,或 long_query_time 仍是默认的 10 秒,都会漏掉大量实际很慢的查询,排查前先确认这两项配置。

易错点

  • 把归一化后的 N/S 语句直接复制执行:占位符要换回真实参数,否则语法或语义都不成立
  • 只按平均耗时排序:偶发一次的严重慢查询会被平均值稀释,总耗时与次数两个维度要一起看
  • 日志里没有记录就以为没有慢查询:slow_query_log 未开或 long_query_time 设得太大都会漏记
  • 看到总耗时 Top 就直接动手优化:高频的简单查询总耗时同样很高,要结合次数与单次耗时判断优化方向
  • 跨版本直接对比模板分布:慢日志格式随版本变化,先确认两边格式与配置一致

数据来源与参考

  • MySQL 8.0 Reference Manual §5.4.5.2 mysqldumpslow
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌