1. 作用
在平时使用MySQL数据库时,经常进行查询操作,有些查询语句执行的时间非常长,当执行时间超过设定的阈值时,我们称这个查询为慢查询,慢查询的相关信息通常需要用日志记录下来称为慢查询日志,mysqldumpslow可以解析慢查询日志文件并汇总其内容,有关慢查询日志的内容我们在MySQL服务器配置与管理专题进行讲解。进行慢查询对应的SQL优化的依据。
2. 注意事项
通常情况下,mysqldumpslow 会将相似的查询分组并显示摘要输出,一般会把数字和字符串用 N和"S"代替,要想显示真实的值可以使用 -a 和 -n 选项。
假如: SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;
mysqldumpslow来显示:
Count: 1 Time=1.91s (1s) Lock=0.00s (0s) Rows=1000.0 (1000), vgos_dba[vgos_dba]@[10.130.229.196]
SELECT * FROM sms_send WHERE service_id=N GROUP BY content LIMIT N, N;
3. 使用方法
语法:
mysqldumpslow [options] [log_file ...]
在没有给出任何选项的输出如下:
Reading mysql slow query log from /usr/local/mysql/data/mysqld80-slow.log
Count: 1 Time=4.32s (4s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into t2 select * from t1 # 执⾏的SQL
Count: 3 Time=2.53s (7s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into t2 select * from t1 limit N # 执⾏的SQL
Count: 3 Time=2.13s (6s) Lock=0.00s (0s) Rows=0.0 (0), root[root]@localhost
insert into t1 select * from t1 # 执⾏的SQL
4. 常用选项
-s sort_type sort_type可选的值如下所示
- t,at:按查询时间或平均查询时间排序,默认排序
- l,al:按锁占用时间或平均锁占用时间排序
- r,ar:按发送的行数或平均发送的行数排序
- c:按计数排序
常见用法:
mysqldumpslow -s c -t 10 /var/run/mysqld/mysqld-slow.log # 取出使用最多的10条慢查询
mysqldumpslow -s t -t 3 /var/run/mysqld/mysqld-slow.log # 取出查询时间最慢的3条慢查询
mysqldumpslow -s t -t 10 -g “left join” /database/mysql/slow-log # 得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s r -t 10 -g 'left join' /var/run/mysqld/mysqld-slow.log # 按照扫描行数最多的