参考地址: http://blog.csdn.net/seteor/article/details/24017913
1 工具简介
pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOWPROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析。可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。 pt-query-digest是一个perl脚本,只需下载并赋权即可执行。 [root@test1 ]# wget percona.com/get/pt-query-digest [root@test1 ]# chmod u+x pt-query-digest
2 使用方式
pt-query-digest使用还是比较简单的
查询所有pt-query-digest命令: pt-query-digest --help
pt-query-digest [OPTIONS] [FILES] [DSN]
--create-review-table 当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。 --create-history-table 当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。 --filter 对输入的慢查询按指定的字符串进行匹配过滤后再进行分析 --limit 限制输出结果百分比数量的sql,默认分析出95%的sql进行优化值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。 --host MySQL服务器地址 --user mysql用户名 --password mysql用户密码 --history 将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化。 --review 将分析结果保存到表中(物理表),这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用--review时,如果存在相同的语句分析,就不会记录到数据表中。
(以备我们日后对查询结果分析或者对查询结果进行存储) --output 分析结果输出类型,值可以是report(标准分析报告)、slowlog(Mysql slow log)、json、json-anon,一般使用report,以便于阅读。 --since 从什么时间开始分析,值为字符串,可以是指定的某个”yyyy-mm-dd [hh:mm:ss]”格式的时间点,也可以是简单的一个时间值:s(秒)、h(小时)、m(分钟)、d(天),如12h就表示从12小时前开始统计。 --until 截止时间,配合—since可以分析一段时间内的慢查询。
(*注:红色加粗字体都是pt-query-digest常用命令)
基本使用:
pt-query-digest +慢查询日志位置
pt-query-digest /home/mysql/data/mysql-slow.log | more
通过Rows sent(发送的行数)和Rows examine(扫描的行数)来看, Rows_examine的值远远大于Rows_sent值可以断定扫描的行数远远大于要查询的行数, 说明索引需要优化
*注:一个sql扫描的行数越多,说明io开销就越大
上面列出了表和一些执行语句的统计,调用次数,表执行期间占用的时间最多的信息等
Query 1就是我们具体分析的sql