怎么利用mysqldumpslow高效分析MySQL慢日志

冬伟吖_7385

冬伟吖_7385

2026-09-18

274人浏览

原创

mysqldumpslow不是查单条慢sql,而是通过抽象参数(如id=123→id=n)归类sql模板,再按总耗时、次数、锁等待等维度排序,快速识别高频/高耗时/高锁等待的瓶颈模式;默认抽象会掩盖具体参数,需加-a查看原始语句,但丧失聚合价值。

怎么利用mysqldumpslow高效分析mysql慢日志

直接说结论:mysqldumpslow 不是用来“查单条慢 SQL”的,而是用来快速识别高频、高耗时、高锁等待的 SQL 模板——它靠抽象(比如把 WHERE id=123 变成 WHERE id=N)归类,再按维度排序。不理解这点,就容易误读输出、漏掉真瓶颈。

为什么 mysqldumpslow 输出里看不到具体参数

默认行为就是抽象数字为 N、字符串为 'S',例如 SELECT * FROM users WHERE name='alice'SELECT * FROM users WHERE name='bob' 会被合并成一条模板:SELECT * FROM users WHERE name='S'。这是为了聚合相似查询,避免被大量仅参数不同的语句刷屏。

  • 想看原始 SQL?加 -a 参数,但会失去聚合效果,日志一多根本没法扫
  • 抽象后仍想保留部分数字特征?可用 -n 3 表示“至少 3 位数才抽象”,但实际极少用,兼容性差且易误导
  • 真正需要定位某次具体执行?别依赖 mysqldumpslow,直接 grep 原始 slow log 文件更可靠

排序参数 -s 的真实含义和常见误用

-s 决定的是“按哪一列汇总值排序”,不是按单次执行时间或行数。比如 -s t 是按该 SQL 模板的**总耗时(Time=xxs(yy s))** 排序,括号里是累计时间;-s at 才是平均时间。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • -s c:按出现次数(Count)降序 → 找高频查询,适合发现缓存穿透、未加 limit 的列表页
  • -s t:按总耗时降序 → 找“最烧 CPU”的模板,但可能被一次极端慢查询拉高,掩盖日常问题
  • -s ar:按平均返回行数降序 → 配合 Rows 字段,能揪出 SELECT * 或没走索引的大范围扫描
  • 别用 -s r(总行数)代替 -s ar:前者容易被单次大批量导出扭曲,参考价值低

必须配合 -t 和 -g 的实战组合

不加 -t 默认只输出前 10 条,但这个“前 10”是按默认排序(-s at)来的,未必是你关心的。而 -g 虽然功能弱(只支持简单子串匹配,不支持正则),但在初期过滤时很实用。

  • 查所有写操作:用 mysqldumpslow -s t -t 20 -g "UPDATE\|INSERT\|DELETE" slow.log
  • 聚焦某个表:用 mysqldumpslow -s c -t 10 -g "orders" slow.log(注意空格和大小写不敏感)
  • 排除系统账号干扰:原始输出里有 root[root]@localhost 这类,但 mysqldumpslow 不支持按 user 过滤,得靠后续 grep -v "root\|admin"
  • 路径必须写对:如果日志是 /var/log/mysql/mysql-slow.log,别漏掉 .log 后缀,否则报错 Can't read /var/log/mysql/mysql-slow: No such file

容易被忽略的三个硬限制

mysqldumpslow 是 Perl 脚本,解析逻辑简单粗暴,遇到格式异常或新版 MySQL 日志结构变化时会静默跳过甚至崩掉。

  • MySQL 8.0.21+ 默认启用 log_slow_extra,日志多了 Query_time_microsec 等字段,老版本 mysqldumpslow 会解析失败 → 检查脚本版本,或临时关掉该选项
  • 日志若被轮转(如 slow.log.1.gz),它不支持自动解压,必须先 zcat slow.log.1.gz > slow.log.1 再分析
  • 输出里的 Lock=0.00s(s) 中括号内是累计锁等待时间,但 mysqldumpslow 默认从总时间里减去锁时间(即真实执行时间),如需看含锁总耗时,务必加 -l

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

1893

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1159

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

695

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

2452

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

3968

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

959

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

4251

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

3862

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

4954

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 168人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 267人学习