pt-query-digest (Mysql slow check analysis)

background

pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog、General log、slowlog,也可以通过SHOW PROCESSLIST或者通过tcpdump抓取的MySQL协议数据来进行分析.(前提是我们的慢查设置为输出到文件中,下面会介绍)

Write in front
本文主要摘自https://www.cnblogs.com/liujingyuan789/p/7281070.html 测试和小部分的解释说明是为了方便读者理解
link

Mysql slow check information can be stored in mysql.slow_log and system files (this article focuses on the latter)

operating

pt-query-digest是一个perl脚本,只需下载并赋权即可执行。
wget percona.com/get/pt-query-digest
chmod u+x pt-query-digest

parameter

log_output = FILE + slow_query_log =ON 才能记录到文件

查看存放位置:
show variables like 'slow_query_log_file';  
关于不使用索引的查询是否记录:
show variables like 'log_queries_not_using_indexes';  默认是关闭的
show variables like '%slow%';默认是关闭的
set global slow_query_log=1; 开启记录

设置阈值:
show variables like 'long_query_time'; 
show global variables like 'long_query_time';
修改统计的时长为一秒:
mysql> set global long_query_time=1;  set long_query_time=1  (回话和全局)
模拟慢sql:
执行select sleep(1) as a, 1 as b;

verification

tailf mysqlvms-slow.log
# Time: 2021-01-20T08:02:06.278674Z
# User@Host: msandbox[msandbox] @ localhost []  Id:  1565
# Query_time: 1.000409  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
use tpcc;
SET timestamp=1611129726;
select sleep(1) as a, 1 as b;

use tools

直接分析慢查询文件:
pt-query-digest  mysqlvms-slow.log

分析指定时间范围内的查询:(我测试的时候,--since时间格式不能写成'2021-01-20 15:30:00' )
pt-query-digest mysqlvms-slow.log  --since '2021-01-20' --until '2021-01-21 15:30:00'

分析指含有select语句的慢查询:
pt-query-digest --filter '$event->{fingerprint} =~ m/^select/i' mysqlvms-slow.log

Insert picture description here
总体上看下查询时间分布,那几个#号多的执行时间(红色部分为慢查大于1秒的语句)
本次使用的是./tpcc_start -h192.168.66.133 -P 17261 -d tpcc -u msandbox -p123456 -w 5 -c 5 -r 120 -l 60 - >test0118/tpcc-output-log 进行压测,手动制造慢查(用于实验)

Interpretation of excerpts

# Current date: Thu Aug 3 16:24:12 2017 工具执行时间
# Hostname: Test_Server1 运行分析工具的主机名
# Files: slow.log 被分析的文件名
# Overall: 2.92k total, 190 unique, 0.81 QPS, 44.91x concurrency _________
total:语句总数量 
unique:唯一的语句数量:唯一查询数量,即对查询条件进行参数化以后,总共有多少个不同的查询,
QPS
并发数
# Time range: 2017-08-03 15:24:14 to 16:24:11 日志记录的时间范围
# Attribute total min max avg 95% stddev median
属性 总计 最小 最大 平均 95% 标准 中等
# ============ ======= ======= ======= ======= ======= ======= =======
# Exec time 161525s 10s 485s 55s 151s 53s 35s 语句执行时间
# Lock time 1115s 17us 121s 382ms 1ms 6s 247us  锁占用时间
# Rows sent 51.71k 0 23.25k 18.13 0.99 602.10 0 发送到客户端的行数
# Rows examine 2.96G 0 51.26M 1.04M 4.93M 4.87M 0 select语句扫描行数
# Rows affecte 19.70M 0 1.64M 6.91k 0 105.18k 0
# Bytes sent 4.15M 0 1.50M 1.46k 1.78k 39.02k 72.65
# Query size 1.62M 15 5.17k 582.83 3.19k 872.43 202.40 查询的字符数
95%:把所有值从小到大排列,位置位于95%的那个数,这个数一般最具有参考价值。
median:中位数,把所有值从小到大排列,位置位于中间那个数。
 # Profile
# Rank Query ID Response time Calls R/Call V/M Item
Rank:所有语句的排名,默认按查询时间降序排列,通过--order-by指定
Query ID:语句的ID,(去掉多余空格和文本字符,计算hash值)
Response time:响应时间,占所有响应时间的百分比
Calls:查询执行次数
R/Call:平均响应时间
V/M:响应时间Variance-to-mean的比率
Item:查询语句一部分

# Users develop 各个用户执行的次数(占比)
# Query_time distribution  查询时间分布, 长短体现区间占比,本例中1s-10s之间查询数量是10s以上的两倍。

Tool parameter supplement

--create-review-table  当使用--review参数把分析结果输出到表中时,如果没有表就自动创建。
--create-history-table 当使用--history参数把分析结果输出到表中时,如果没有表就自动创建。
--filter 对输入的慢查询按指定的字符串进行匹配过滤后再进行分析。
--limit  限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。
--host  mysql服务器地址
--user  mysql用户名
--password  mysql用户密码
--history  将分析结果保存到表中,分析结果比较详细,下次再使用--history时,如果存在相同的语句,且查询所在的时间区间和历史表中的不同,则会记录到数据表中.
--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可以分析一段时间内的慢查询。

May encounter

[root@mha133 data]# pt-query-digest slow.log 
Can't locate Data/Dumper.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /tools/percona-toolkit-3.1.0/bin/pt-query-digest line 75.
BEGIN failed--compilation aborted at /tools/percona-toolkit-3.1.0/bin/pt-query-digest line 75.

yum -y install perl-Data-Dumper
pt-query-digest slow.log 
Can't locate Digest/MD5.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /tools/percona-toolkit-3.1.0/bin/pt-query-digest line 2470.
BEGIN failed--compilation aborted at /tools/percona-toolkit-3.1.0/bin/pt-query-digest line 2470.

yum -y install perl-Digest-MD5 
 (依赖perl-Digest.noarch 0:1.17-245.el7)

Write at the end

把查询保存到query_history表:
pt-query-digest --user=root –password=abc123 --review h=localhost,D=test,t=query_ history --create-review-table slow.log
 
通过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
 
分析binlog:
mysqlbinlog mysql-bin.000001 > mysql-bin000001.sql
pt-query-digest --type=binlog mysql-bin000001.sql > slow10.log
 
分析general log:
pt-query-digest --type=genlog localhost.log > slow11.log
 # 3.5s user time, 60ms system time, 28.96M rss, 209.24M vsz 该工具执行日志分析的用户时间,系统时间,物理内存占用大小,虚拟内存占用大小

This article explains that the main technical content comes from the sharing of Internet technology giants, as well as some self-processing (only for the role of annotations). If related questions, please leave a message after the confirmation, the implementation of infringement will be deleted

Guess you like

Origin blog.csdn.net/baidu_34007305/article/details/112887901