percona-toolkit : pt-query-digest
pt-query-digest是Percona Toolkit工具集中常用的一个工具,其能够分析MySQL的slowlog,general log,binlog文件,同时也可以使用show processlist或者tcpdump抓取的MySQL协议数据进行分析。
安装Toolkit
下载最新工具包
安装依赖
$ yum install perl-DBI perl-DBD-MySQL perl-Digest-MD5 perl-IO-Socket-SSL perl-TermReadKey |
安装Toolkit
$ rpm -ivh percona-toolkit-3.1.0-2.el7.x86_64.rpm |
pt-query-digest常用参数
参数 | 说明 |
---|---|
–host | mysql主机 |
–port | mysql端口 |
–user | mysql用户 |
–password | MySQL用户密码 |
–filter | 对慢查询进行条件过滤 |
–limit | 限制输出结果百分比或数量,默认是最慢的20条记录 |
–history | 将分析结果保存到表中,分析结果比较详细,下次再使用–history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中,可以通过查询同一CHECKSUM来比较某类型查询的历史变化 |
–review | 将分析结果保存到表中,这个分析只是对查询条件进行参数化,一个类型的查询一条记录,比较简单。当下次使用–review时,如果存在相同的语句分析,就不会记录到数据表中。 |
–create-review-table | 当使用–review参数把分析结果输出到表中,如果没有表就自动创建 |
–create-history-table | 当使用–history参数把分析结果输出到表中,如果没有表就自动创建 |
–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形成一个范围查询 |
示例
分析整个slowlog
$ pt-query-digest slow.log |
分析近12个小时的slowlog
$ pt-query-digest --since=12h slow.log |
分析指定范围的slowlog
$ pt-query-digest slow.log --since '2020-01-19 09:30:00' --until '2020-01-19 10:30:00' |
分析带有select的慢查询
$ pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' slow.log |
分析指定用户的慢查询
$ pt-query-digest --filter '($event->{user} || "") =~ m/^root/i' slow.log |
分析全表扫和full join的慢查询
$ pt-query-digest --filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' slow.log |
把分析结果保存到review表
$ pt-query-digest --user=root –password=Abc123# --review h=localhost,D=test,t=query_review --create-review-table slow.log |
把分析结果保存到history表
pt-query-digest --user=root –password=Abc123# --review h=localhost,D=test,t=query_history --create-review-table slow.log |
通过tcpdump抓取mysql协议数据并分析
$ tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 33006 > mysql.tcpdump |
分析指定binlog
$ mysqlbinlog mysql-bin.000093 > mysql-bin000100.sql |
分析gerneral log
$ pt-query-digest --type=genlog gerneral.log |
结果分析
# 6.2s user time, 40ms system time, 26.66M rss, 189.31M vsz |
分析报告分为三个部分:
- 第一部分为总体统计结果,overall表示查询数量;time range为时间范围;unique为唯一查询数量,95%表示把所有值从小到大排列,位置位于95%的那个数;median表示中位数
- 第二部分为分组统计结果,rank为所有语句的排名,默认按查询时间降序,通过–order-by指定;reponse为总的响应时间;time为分析时间占比;calls执行次数;R/CALL平均响应时间
- 第三部分为每条SQL的详细分析结果
参考链接
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 DBA学习记录!