Mysql——》pt-query-digest

推荐链接:
    总结——》【Java】
    总结——》【Mysql】
    总结——》【Spring】
    总结——》【SpringBoot】
    总结——》【MyBatis、MyBatis-Plus】

【percona-toolkit官网】pt-query-digest

一、概念

pt-query-digest是用于分析mysql慢查询的一个工具,可以把分析结果输出到文件中,分析过程是先对查询语句的条件进行参数化,然后对参数化以后的查询进行分组统计,统计出各查询的执行时间、次数、占比等,可以借助分析结果找出问题进行优化。

二、安装

方法一:通过rpm安装

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install percona-toolkit
which pt-query-digest

方法二:通过源码安装

cd /usr/local/src
wget percona.com/get/percona-toolkit.tar.gz
tar zxf percona-toolkit.tar.gz
cd percona-toolkit-2.2.19
perl Makefile.PL PREFIX=/usr/local/percona-toolkit
make && make install

三、语法

pt-query-digest [OPTIONS] [FILES] [DSN]

属性描述
–create-review-table当使用–review参数把分析结果输出到表中时,如果没有表就自动创建。
–create-history-table当使用–history参数把分析结果输出到表中时,如果没有表就自动创建。
–filter对输入的慢查询按指定的字符串进行匹配过滤后再进行分析
–limit限制输出结果百分比或数量,默认值是20,即将最慢的20条语句输出,如果是50%则按总响应时间占比从大到小排序,输出到总和达到50%位置截止。
–hostmysql服务器地址
–usermysql用户名
–passwordmysql用户密码
–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可以分析一段时间内的慢查询。

四、示例

 -- 查看慢查询日志的路径:/data/mysql/data/dcbi-3306/log/slow.log
 show variables like 'slow_query_log_file%';

在这里插入图片描述

1、分析全部的慢查询

pt-query-digest slow.log > slow_report.log

2、分析最近12小时内的慢查询

pt-query-digest slow.log --since=12h > slow_report.log

3、分析指定时间范围内的慢查询

pt-query-digest slow.log --since '2017-01-07 09:30:00' --until '2017-01-07 10:00:00' > slow_report.log

4、分析只含有select语句的慢查询

pt-query-digest slow.log --filter '$event->{fingerprint} =~ m/^select/i' > slow_report.log

5、分析指定某个用户的慢查询

pt-query-digest slow.log --filter '($event->{user} || "") =~ m/^root/i' > slow_report.log

6、分析所有的全表扫描或full join的慢查询

pt-query-digest slow.log --filter '(($event->{Full_scan} || "") eq "yes") ||(($event->{Full_join} || "") eq "yes")' > slow_report.log

五、输出结果

1、总体统计结果

# 158.3s user time, 8.1s system time, 329.93M rss, 526.05M vsz
# Current date: Thu Nov 17 10:50:50 2022
# Hostname: ejudatamysql-shqstst-1
# Files: slow.log
# Overall: 5 total, 5 unique, 0.00 QPS, 0.01x concurrency ________________
# Time range: 2022-11-16T17:00:05 to 2022-11-16T18:22:05
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
# Exec time            41s      3s     23s      8s     23s      7s      6s
# Lock time            1ms    80us   371us   233us   366us   114us   247us
# Rows sent          1.78M       0   1.62M 364.03k   1.61M 644.37k   3.35k
# Rows examine       3.13M   3.40k   1.62M 640.92k   1.61M 622.68k 298.06k
# Query size         2.25k      48   1.05k  461.40   1.04k  417.04  258.32


执行日志分析的用户时间,系统时间,物理内存占用大小,虚拟内存占用大小

Current date:执行时间
Hostname:运行分析工具的主机名
Files:被分析的文件名
Overall:语句总数量,唯一的语句数量,QPS,并发数
Time range:日志的时间范围

属性               总计      最小    最大    平均    95%  标准    中等

Exec time:执行时间
Lock time:锁占用时间
Rows sent:发送到客户端的行数
Rows examine:select语句扫描行数
Query size:查询的字符数

2、查询分组统计结果

# Profile
# Rank Query ID                            Response time Calls R/Call  V/M
# ==== =================================== ============= ===== ======= ===
#    1 0xCC9D2082C4A06376B87DDAC39F964501  22.7053 55.2%     1 22.7053  0.00 SELECT zhgj_buildings_info
#    2 0xB02191120C4512B1F78DAF637002F62E   6.8570 16.7%     1  6.8570  0.00 SELECT house_hub.position_door
#    3 0x4C6BD0F9D7F6EF6D743F3548FBE4A10C   5.8865 14.3%     1  5.8865  0.00 DELETE ip_monitor
#    4 0x9E6B38A8C7E9F531D052E6D7F73FFAE2   2.8988  7.1%     1  2.8988  0.00 SELECT zhgj_community_info
#    5 0x02199972596C7CA130C62FB0DA83AE5A   2.7521  6.7%     1  2.7521  0.00 SELECT region

Rank:排名,默认按查询时间降序排列,通过--order-by指定
Query ID:查询语句的ID(去掉多余空格和文本字符,计算hash值)
Response time:总的响应时间
time:该查询占总的响应时间比
Calls:该查询执行次数
R/Call:该查询平均每次执行的响应时间
V/M:响应时间Variance-to-mean的比率

3:每一种查询的详细统计结果

# Query 1: 0 QPS, 0x concurrency, ID 0xCC9D2082C4A06376B87DDAC39F964501 at byte 11084958563
# Scores: V/M = 0.00
# Time range: all events occurred at 2022-11-16T18:00:27
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count         20       1
# Exec time     55     23s     23s     23s     23s     23s       0     23s
# Lock time     28   338us   338us   338us   338us   338us       0   338us
# Rows sent     91   1.62M   1.62M   1.62M   1.62M   1.62M       0   1.62M
# Rows examine  51   1.62M   1.62M   1.62M   1.62M   1.62M       0   1.62M
# Query size    46   1.05k   1.05k   1.05k   1.05k   1.05k       0   1.05k
# String:
# Databases    house_crawler
# Hosts        10.116.147.12
# Users        datatech
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s
#  10s+  ################################################################
# Tables
#    SHOW TABLE STATUS FROM `house_crawler` LIKE 'zhgj_buildings_info'\G
#    SHOW CREATE TABLE `house_crawler`.`zhgj_buildings_info`\G
# EXPLAIN /*!50100 PARTITIONS*/
select '2022-11-17 02:00:00',replace(replace(id                ,'
',''),'
',''),replace(replace(cityname          ,'
',''),'
',''),replace(replace(createdat         ,'
',''),'
','') from zhgj_buildings_info\G
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值