工具做什么
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 秒,都会漏掉大量实际很慢的查询,排查前先确认这两项配置。