博客 / Linux/ MySQL 慢查询日志分析工具 mysqldumpslow 使用详解

MySQL 慢查询日志分析工具 mysqldumpslow 使用详解

MySQL 慢查询日志分析工具 mysqldumpslow 使用详解

如何使用 mysqldumpslow 工具分析慢查询日志

mysqldumpslow 是 MySQL 自带的一个用于解析和分析慢查询日志文件的 Perl 脚本工具。它可以帮助数据库管理员快速定位执行缓慢的 SQL 语句,是性能调优的常用工具。

1. 查找工具路径

首先,你需要找到 mysqldumpslow 工具在你的系统中的位置。通常它位于 MySQL 的安装目录下。

find / -name mysqldumpslow

例如,查询结果可能返回:

/usr/local/mysql/bin/mysqldumpslow

或者,你也可以直接使用 which 命令:

which mysqldumpslow

2. 常用分析命令示例

以下是一些最常用的分析命令,假设你的慢查询日志文件路径为 /home/wwwlogs/mysql_slow_querys.log

访问次数最多的 10 条 SQL 语句

按照 SQL 语句出现的次数(Count)降序排列,显示前 10 条。

mysqldumpslow -s c -t 10 /home/wwwlogs/mysql_slow_querys.log

返回记录集行数最多的 10 条 SQL 语句

按照平均返回行数(Rows sent)降序排列,显示前 10 条。

mysqldumpslow -s r -t 10 /home/wwwlogs/mysql_slow_querys.log

执行时间最长的 10 条包含 "LEFT JOIN" 的 SQL 语句

按照平均查询时间(Query time)降序排列,并过滤出包含 "left join" 的语句,显示前 10 条。

mysqldumpslow -s t -t 10 -g "left join" /home/wwwlogs/mysql_slow_querys.log

3. 查看完整帮助信息

要查看所有可用参数及其说明,请使用 --help 选项。

mysqldumpslow --help

4. 核心参数详解

以下是 mysqldumpslow 最常用和核心的参数说明:

  • -s ORDER:指定排序依据。这是最重要的参数之一。
    • c:按访问次数(Count)排序。
    • t:按平均查询时间(Query time)排序。
    • l:按平均锁定时间(Lock time)排序。
    • r:按平均返回行数(Rows sent)排序。
    • at:按平均查询时间排序(默认值)。
    • al:按平均锁定时间排序。
    • ar:按平均返回行数排序。
    • ac:按平均访问次数排序。

    注意:参数 c, t, l, r 是降序(从大到小),而加上 a 前缀的 ac, at, al, ar 是升序(从小到大)。

  • -t NUM:仅显示前 NUM 条结果(Top N)。
  • -g PATTERN:使用正则表达式(不区分大小写)过滤,只显示包含该模式的语句。
  • -r:反转排序顺序。通常与 -s 一起使用,例如 -s t -r 会按查询时间升序排列。
  • -a:不将数字抽象为 'N',字符串抽象为 'S'。默认情况下,工具会将具体值抽象以方便归类统计,使用此参数可以显示原始值。

5. 完整参数列表

以下是 mysqldumpslow --help 输出的完整参数说明,供高级用户参考:

  --verbose    Verbose mode.
  --debug      Debug mode.
  --help       Write this help text to standard output.

  -v           Verbose mode.
  -d           Debug mode.
  -s ORDER     What to sort by (al, at, ar, c, l, r, t), 'at' is default.
                al: average lock time
                ar: average rows sent
                at: average query time
                 c: count
                 l: lock time
                 r: rows sent
                 t: query time
  -r           Reverse the sort order (largest last instead of first).
  -t NUM       Just show the top n queries.
  -a           Do not abstract all numbers to N and strings to 'S'.
  -n NUM       Abstract numbers with at least n digits within names.
  -g PATTERN   Grep: only consider statements that include this string.
  -h HOSTNAME  Hostname of the database server for *-slow.log filename (can be a wildcard).
               Default is '*', i.e., match all.
  -i NAME      Name of the server instance (if using the mysql.server startup script).
  -l           Do not subtract lock time from the total time.

6. 使用技巧与最佳实践

  • 组合使用:通常先使用 -s c -t 20 找出最频繁的慢查询,再用 -s t -t 10 找出最耗时的查询进行优化。
  • 注意路径:如果 mysqldumpslow 不在系统 PATH 中,需要指定完整路径,如 /usr/local/mysql/bin/mysqldumpslow
  • 日志文件权限:确保运行命令的用户有读取慢查询日志文件的权限。
  • 结果解读:输出结果中,抽象化的值(如 N, S)代表一类查询。使用 -a 参数可以查看具体的值,但会导致同类查询被分开统计。

通过熟练使用 mysqldumpslow,你可以快速从海量的慢查询日志中定位到关键的性能瓶颈 SQL,为后续的索引优化、SQL 重写等调优工作提供明确的方向。

发表评论

您的邮箱不会公开。必填项已用 * 标注。