注册 登录
  • 欢迎访问"运维那点事",推荐使用Google浏览器访问,可以扫码关注本站的"微信公众号"。
  • 如果您觉得本站对你有帮助,那么可以扫码捐助以帮助本站更好地发展。

使用mysqldumpslow工具分析MySQL慢查询

MySQL 彭东稳 6067次浏览 已收录 0个评论

一、MySQL慢查询日志

MySQL慢查询日记用于记录SQL语句查询时间大于MySQL变量中定义的时间,以及可以选择定义记录没有使用索引的SQL查询语句。DBA可以通过慢查询日志来找出有问题的SQL语句,对其进行优化。MySQL慢查询日志默认关闭状态,所以需要通过参数slow_query_log=1开启慢查询日志,并通过long_query_time参数定义慢查询日志的阈值才可开始使用慢查询日志的功能,另外还可以加log-queries-not-using-indexes参数,表示未使用索引的查询也被记录到慢查询日志中,三个参数都可以动态开启。

在MySQL 5.7.2之后,如果设置了慢日志是写到文件里,需要设置log_timestamps(默认是UTC时间,比我们晚8小时,需要设置为系统时间log_timestamps=SYSTEM)来控制写入到慢日志文件里面的时区(该参数同时影响general日志和error日志)。如果设置慢日志是写入到数据库中,该参数将不产生作用。

慢查询日志中给出了账号、主机、运行时间、锁定时间、返回行等信息,然后根据这些信息来分析此SQL语句哪里出了问题。当开始使用慢查询功能后可能随着慢查询日志的越来越大,分析起来就不是那么容易了,这个时候就可以使用MySQL内置的mysqldumpslow命令来进行分析。

慢查询日志记录方式默认是在文件中,从MySQL5.1开始支持记录到表中,这使得用户的查询更加方便和直观,如果想使用表需要管理员定义log_output参数。另外,同一般查询日志一样,慢查询日志可以直接删除。删除后在不重启服务器的情况下,需要执行flush logs语句重建日志文件。

二、mysqldumpslow工具介绍

MySQL慢查询日志包含有关执行时间长的查询的信息(请参见“慢查询日志”),mysqldumpslow解析MySQL慢查询日志文件并打印其内容摘要。

通常,mysqldumpslow可以组合类似的查询,除了数字和字符串数据值的特定值。它将“ 抽象 ”这些值N和’S’显示汇总输出时。该-a和-n 选项可以用来修改值抽象行为。

语法

[options]

-a:不要将所有数字抽象为N和字符串抽象为S。

-n:抽象数字至少包含指定的数字。

-g pattern:只显示与模式匹配的语句,大小写不敏感。

-h host_name:用于*-slow.log文件名的MySQL服务器的主机名,该值可以包含通配符,默认值为* (全部匹配)。

-r:反转排序顺序。

-s sort_type:如何排序输出,值sort_type应从以下列表中选择。

t:按查询总时间排序。

l:按查询总锁定时间排序。

r:按总发送行排序。

c:按计数排序。

at:按查询时间或平均查询时间排序。

al:按平均锁定时间排序。

ar:按平均行发送排序。

默认情况下,mysqldumpslow按平均查询时间(相当于-s at)排序。

-t N:是top n的意思,即为返回前面多少条的数据。

-v:详细模式。

三、mysqldumpslow工具案例

仅显示2条结果集,且按照查询总时间排序,且过滤group by语句;使用mysqldumpslow的分析结果不会显示具体完整的sql语句。

1. 假如真正的sql语句如下:SELECT * FROM sms_send WHERE service_id=10 GROUP BY content LIMIT 0, 1000;

mysqldumpslow显示的结果会是:

2. 如果我们再执行一条SELECT * FROM sms_send WHERE service_id=20 GROUP BY content LIMIT 10000, 1000;

mysqldumpslow显示的结果会是:

虽然这两条语句条件不一样,

1:一个是server_id=10,一个是server_id=20

2:一个是LIMIT 0, 1000,一个是LIMIT 10000, 1000

但是mysqldumpslow分析会认为这是一种类型的语句,会合并显示。

四、mysqldumpslow结果分析

Count会告诉我们这种类型的语句执行了几次,Time会告诉我们这种类型的语句执行的最大时间,Time=2.79s (5s)中(5s)

是指这类型的语句执行总共花费的时间

告诉我们执行了2次,最大时间是2.79s,总共花费时间5s,lock时间0s,单次返回的结果数是1条记录,2次总共返回2条记录m。

Rows=1.0 (2) 是按照以下逻辑展示的:是指在Count: 2次数总共返回了2条记录集;row=1.0显示(2)/ Count: 2,如果此时Count是3,那么row的计算方式是Rows=2/3,Rows=0.67。

主要功能是, 统计不同慢SQL的:出现次数(Count),执行最长时间(Time),累计总耗费时间(Time),等待锁的时间(Lock),发送给客户端的行总数(Rows),扫描的行总数(Rows)。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (5)or分享 (0)
关于作者:

您必须 登录 才能发表评论!