共计 3206 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章给大家分享的是有关怎么使用 pt-query-digest 分析日志的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。
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 [OPTIONS] [FILES] [DSN]
–create-review-table 当使用 –review 参数把分析结果输出到表中时,如果没有表就自动创建。
–create-history-table 当使用 –history 参数把分析结果输出到表中时,如果没有表就自动创建。
–filter 对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
–limit 限制输出结果百分比或数量,默认值是 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 可以分析一段时间内的慢查询。
3、分析报告解析
第一部分:总体统计结果, 如下图
Overall: 总共有多少条查询,上例为总共 266 个查询。
Time range: 查询执行的时间范围。
unique: 唯一查询数量,即对查询条件进行参数化以后,总共有多少个不同的查询,该例为 55。
total: 总计 min: 最小 max: 最大 avg: 平均
95%: 把所有值从小到大排列,位置位于 95% 的那个数,这个数一般最具有参考价值。
median: 中位数,把所有值从小到大排列,位置位于中间那个数。
第二部分:查询分组统计结果, 如下图
由上图可见,这部分对查询进行参数化并分组,然后对各类查询的执行情况进行分析,结果按总执行时长,从大到小排序。
Response: 总的响应时间。
time: 该查询在本次分析中总的时间占比。
calls: 执行次数,即本次分析总共有多少条这种类型的查询语句。
R/Call: 平均每次执行的响应时间。
Item : 查询对象
第三部分:每一种查询的详细统计结果,如下图:
由上图可见,1 号查询的详细统计结果,最上面的表格列出了执行次数、最大、最小、平均、95% 等各项目的统计。
Databases: 库名
Users: 各个用户执行的次数(占比)
Query_time distribution : 查询时间分布, 长短体现区间占比,本例中 1s-10s 之间查询数量是 10s 以上的数倍。
Tables: 查询中涉及到的表
Explain: 示例
4. 用法示例
(1) 直接分析慢查询文件
pt-query-digest slow.log slow_report.log
(2) 分析最近 12 小时内的查询
pt-query-digest –since=12h slow.log slow_report2.log
(3) 分析指定时间范围内的查询
pt-query-digest slow.log –since 2014-04-17 09:30:00 –until 2014-04-17 10:00:00 slow_report3.log
(4) 分析只含有 select 语句的慢查询
pt-query-digest–filter $event- {fingerprint} =~ m/^select/i slow.log slow_report4.log
(5) 针对某个用户的慢查询
pt-query-digest–filter ($event- {user} || ) =~ m/^root/i slow.log slow_report5.log
(6) 查询所有的全表扫描或 full join 的慢查询
pt-query-digest–filter (($event- {Full_scan} || ) eq yes ) ||(($event- {Full_join} || ) eq yes ) slow.log slow_report6.log
(7) 把查询保存到 query_review 表
pt-query-digest –user=root –password=abc123 –review h=localhost,D=test,t=query_review–create-review-table slow.log
(8) 把查询保存到 query_history 表
pt-query-digest –user=root –password=abc123 –review h=localhost,D=test,t=query_ history–create-review-table slow.log_20140401
pt-query-digest –user=root –password=abc123–review h=localhost,D=test,t=query_history–create-review-table slow.log_20140402
(9) 通过 tcpdump 抓取 mysql 的 tcp 协议数据,然后再分析
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 mysql.tcp.txt
pt-query-digest –type tcpdump mysql.tcp.txt slow_report9.log
(10) 分析 binlog
mysqlbinlog mysql-bin.000093 mysql-bin000093.sql
pt-query-digest –type=binlog mysql-bin000093.sql slow_report10.log
(11) 分析 general log
pt-query-digest –type=genlog localhost.log slow_report11.log
感谢各位的阅读!关于“怎么使用 pt-query-digest 分析日志”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!