MySQL慢查询功能详解(2)

特别要注意的是long_query_time的设置,5.6之后支持设置低于0.1秒,所以记录的详细程度,就看你自己的需求,数据库容量比较大的,超过0.1秒还是比较多,所以就变得有点不合理了。

慢查询日志的记录定义

直接查看mysql的慢查询日志分析,比如我们可以tail -f  slow_query.log查看里面的内容

tail -f  slow_query.log
# Time: 110107 16:22:11
# User@Host: root[root] @ localhost []
# Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774
SET timestamp=1294388531;
select count(*) from ep_friends;

字段意义解析:

第一行,SQL查询执行的时间
第二行,执行SQL查询的连接信息,用户和连接IP
第三行,记录了一些我们比较有用的信息,如下解析
    Query_time,这条SQL执行的时间,越长则越慢
    Lock_time,在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
    Rows_sent,查询返回的行数
    Rows_examined,查询检查的行数,越长就当然越费时间

第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间。

第五行及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。

分析慢查询的软件

虽然慢查询日志已经够清晰,但是往往我们的日志记录到的不是只有一条sql,可能有很多很多条,如果不加以统计,估计要看到猴年马月,这个时候就需要做统计分析了。

方法一:使用mysql程序自带的mysqldumpslow命令分析,例如:
mysqldumpslow -s c -t 10 /tmp/slow-log
这会输出记录次数最多的10条SQL语句,得出的结果和上面一般慢查询记录的格式没什么太大差别,这里就不展开来详细解析了。

参数解析:
-s:是表示按照何种方式排序,子参数如下:

c、t、l、r:分别是按照记录次数、时间、查询时间、返回的记录数来排序,

ac、at、al、ar:表示相应的倒叙;

-t:返回前面多少条的数据,这里意思就是返回10条数据了(也可以说是前十)

-g:后边可以写一个正则匹配模式,大小写不敏感的,比如:
    /path/mysqldumpslow -s r -t 10 /tmp/slow-log,得到返回记录集最多的10个查询。
    /path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log,得到按照时间排序的前10条里面含有左连接的查询语句。

方法二:使用pt(Percona Toolkit)工具的pt-query-digest进行统计分析。这个是由Percona公司出品的一个用perl编写的脚本,只有安装上pt工具集才会存在,有兴趣的朋友就要先安装pt工具了。直接分析慢查询文件,执行如下:

pt-query-digest slow_querys.log >t.txt

因为记录里还是可能有很多sql在,看起来还是费劲,所以建议输出到文件来看了。输出的信息会分成三部分,

第一部分:总体统计结果

# 580ms user time, 0 system time, 35.46M rss, 100.01M vsz
# Current date: Wed Jul 19 14:32:40 2017
# Hostname: yztserver1
# Files: slow_querys.log
# Overall: 2.63k total, 36 unique, 0.03 QPS, 0.03x concurrency ___________
# Time range: 2017-07-18T03:17:17 to 2017-07-19T06:30:18
# Attribute          total    min    max    avg    95%  stddev  median
# ============    ======= ======= ======= ======= ======= ======= =======
# Exec time          3145s      1s      5s      1s      2s  258ms      1s
# Lock time          677ms      0    64ms  257us  260us    2ms  144us
# Rows sent          8.44k      0  5.50k    3.29    0.99  108.92    0.99
# Rows examine      1.06G      0  2.12M 421.02k 619.64k 155.33k 419.40k
# Rows affecte          0      0      0      0      0      0      0
# Bytes sent        9.00M      11  6.24M  3.51k  13.78k 119.76k  65.89
# Query size      735.85k      6  2.19k  286.72  463.90  128.05  246.02

记录这个慢日志文件里面的所有慢查询统计信息,通常粗略看看就好了:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/95622e095e32891072be0272125bede2.html