mysqldumpslow慢日志分析工具
01
mysqldumpslow工具介绍
作为一名DBA,分析MySQL数据库的慢日志是一项经常会遇到的任务,今天我们来看下mysql官方自带的慢日志分析工具mysqldumpslow。
mysqldumpslow工具可以用来分析mysql的slowlog日志文件,常用几个参数:
-a
不要显示的抽象出来SQL指纹,这里解释下SQL指纹的概念。
例如,对于下面2个SQL语句:
select * from table where id=1;
select * from table where id=2;
这2个SQL的SQL指纹都是一样的,它们都可以抽象出来下面的查询模型:
select * from table where id=xxx ;
如果使用了-a,就不会抽象出来SQL指纹,会直接显示SQL;相反,不使用-a,则会抽象出来SQL指纹。
-n
抽象出来的数字至少包含多少位(这个选项一般很少用)
-g
结果中使用grep过滤(其实这个功能没什么必要,我们可以执行完成之后直接用grep命令过滤,更加灵活。)
-l
不要从总时间中减去锁的时间
-s
排序方法,可选的值有:
t,at :按照慢SQL查询时间或者平均时间排序
l,al:按照慢SQL加锁时间或者平均加锁时间
r,ar:按照慢SQL返回行数或者平均返回行数
c:按照慢SQL的出现次数
-t
代表选择输出结果中的top N
02
具体案例分析
常见的一种使用方法如下:
mysqldumpslow -a -s t -t 4 -v slow.log
代表按照SQL执行时间,返回slowlog中前4条慢SQL,并且不返回SQL指纹,返回SQL的真实文本。
[root@ ]# /usr/local/mysql-8.0.19/bin/mysqldumpslow -a -s t -t 4 -v slow.log
Reading mysql slow query log from slow.log
Count: 2 Time=54.47s (108s) Lock=0.00s (s) Rows=424.0 (), superdba[superdba]@[10.xx.3.129]
select distinct port,ip,sname ,hit_size from collect.mysql_hit where create_time > DATE_SUB((select max(create_time) from collect.mysql_hit where port = ),INTERVAL MINUTE) and hit_size < and sname='mdb' order by hit_size desc
Count: Time=97.75s (s) Lock=0.00s (s) Rows=1.0 (), superdba[superdba]@[10.xx.3.129]
select count() from mysql_hit where create_time > DATE_SUB(SYSDATE(),INTERVAL MINUTE) and hit_size < and sname='mdb'
Count: Time=92.98s (s) Lock=0.00s (s) Rows=254.0 (), superdba[superdba]@[10.xx.3.129]
select distinct(port),ip,sname,hit_size from mysql_hit where create_time > DATE_SUB(SYSDATE(),INTERVAL MINUTE) and hit_size < and sname='mdb'
Count: Time=90.47s (s) Lock=0.00s (s) Rows=552.0 (), superdba[superdba]@[10.xx.3.129]
select distinct(port),ip,sname,hit_size from mysql_hit where create_time > DATE_SUB(SYSDATE(),INTERVAL MINUTE) and hit_size < and sname='mdb'
我们按照SQL执行时间(也就是括号内的时间来进行排序),
并显示出top 4 的慢日志分析结果。
03
总结
mysqldumpslow工具的分析结果比较简单,但是分析慢日志的速度整体还是比较快的。可以用作快速分析慢日志的一个参考工具。
在percona-toolkit工具包中,还有一个类似的工具,叫pt-query-digest工具,它的分析报告会更加详细。但是分析的耗时也会相应增加。这个工具使用也比较简单,之前的文章中也有介绍过。
大家可以根据自己的实际情况选择使用哪一个。如果只想快速简单分析,mysqldumpslow是一个好的选择,如果要更加详细的分析报告,则可以考虑pt-query-digest工具。