什么是 mysqldumpslow?

mysqldumpslow 是 MySQL 自带的一个强大的命令行工具,用于分析慢查询日志。它帮助数据库管理员和开发人员通过解析和汇总慢查询日志文件,以可读的格式识别性能瓶颈。

基本语法

mysqldumpslow [选项] [日志文件...]

常用选项详解

基本过滤选项

  • -s - 排序方式 (t=时间, c=次数, r=行数, 等)
  • -t - 显示前N个查询
  • -g - grep模式:只显示匹配模式的语句

详细选项

  • -a - 不将所有数字抽象为N,字符串抽象为’S’
  • -n - 抽象化至少N位数的数字
  • -r - 反向排序
  • -l - 不从总时间中减去锁定时间

实际使用示例

示例1:显示最慢的前10个查询

mysqldumpslow -s t -t 10 /var/log/mysql/slow.log

示例2:显示执行次数最多的查询

mysqldumpslow -s c -t 5 /var/log/mysql/slow.log

示例3:查找影响行数最多的查询

mysqldumpslow -s r -t 5 /var/log/mysql/slow.log

示例4:搜索特定模式的查询

mysqldumpslow -g "SELECT.*users" /var/log/mysql/slow.log

输出结果解释

Count: 5  Time=2.50s (12s)  Lock=0.00s (0s)  Rows=1000.0 (5000)
SELECT * FROM users WHERE name='S'

这表示:

  • Count: 5 - 查询执行了5次
  • Time=2.50s (12s) - 平均执行时间2.50秒,总计12秒
  • Lock=0.00s (0s) - 锁定时间信息
  • Rows=1000.0 (5000) - 平均检查行数1000,总计5000

使用前提

  1. 必须启用慢查询日志,在 MySQL 配置文件中设置:
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
  1. 日志文件必须存在且可读

有用的排序选项

选项 排序依据 说明
-s t 时间 查询执行时间
-s c 次数 执行次数
-s r 行数 检查的行数
-s l 锁定 锁定时间