如何使用 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 重写等调优工作提供明确的方向。