mysqldumpslow是mysql自带的一个慢日志分析工具。
如果执行这个命令提示不存在时,可使用find / -name mysqldumpslow
命令查找一下,然后将其添加到PATH中。
1 | ln -s /www/server/mysql/bin/mysqldumpslow /usr/local/bin/mysqldumpslow |
宝塔中Mysql的慢日志默认存放在:/www/server/data/mysql-slow.log
可以将慢日志复制到测试机上分析。
参数
1 | -s 是什么方式排序 |
分析示例
1、获取10条执行时间最长的sql语句
1 | mysqldumpslow -s t -t 10 /www/server/data/mysql-slow.log |
其中-s t
表示按查询总时长排序,即下面结果中Time=6.83s (567s)中的567s排序
1 | Count: 83 Time=6.83s (567s) Lock=0.00s (0s) Rows=264498.0 (21953330), 2users@localhost |
返回结果解析:
Count: 83 说明执行了83次
Time=6.83s (567s) 说明最大时间是6.83s,总共花费时间567s
Lock=0.00s (0s) 说明查询不锁表
Rows=264498.0 (21953330) 说明单次返回的结果数是264498条记录,总共查询了264498x83条
2、获取10条查询记录数最多的sql语句
1 | mysqldumpslow -s r -t 10 /www/server/data/mysql-slow.log |
3、查询10条执行时间最长且包含left join的sql语句
1 | mysqldumpslow -s t -t 10 -g "left join" /www/server/data/mysql-slow.log |
4、获取10条执行时间最长且不合并分析结果的sql语句
1 | mysqldumpslow -a -s t -t 10 /www/server/data/mysql-slow.log |
其中-a
说明不合并类似的SQL语句,显示具体的SQL语句中的数字和字符串。
因为在mysqldumpslow统计中,如下两种查询默认是同一种类型的语句,
1 | SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000; |
会合并显示分析结果:
1 | Count: 2 Time=2.79s (5s) Lock=0.00s (0s) Rows=1.0 (2), vgos_dba[vgos_dba]@[10.130.229.196] |
5、获取平均访问记录数最多的10条sql语句
1 | mysqldumpslow -s ar -t 10 /www/server/data/mysql-slow.log |
常见问题
1、如下执行查询后,提示:
1 | Reading mysql slow query log from /www/server/data/mysql-slow.log |
说明要分析的sql日志太大了,请拆分后再分析。
拆分的命令为:
1 | tail -100000 /www/server/data/mysql-slow.log>mysql-slow.20191121.log |
参考:
https://www.jianshu.com/p/eb2e2c84330f
https://www.jianshu.com/p/eb2e2c84330f
https://www.cnblogs.com/phpper/p/6685540.html