Mysql——》pt-query-digest
推荐链接:
总结——》【Java】
总结——》【Mysql】
总结——》【Spring】
总结——》【SpringBoot】
总结——》【MyBatis、MyBatis-Plus】
Mysql——》pt-query-digest
- 一、概念
- 二、安装
- 方法一:通过rpm安装
- 方法二:通过源码安装
- 三、语法
- 四、示例
- 1、分析全部的慢查询
- 2、分析最近12小时内的慢查询
- 3、分析指定时间范围内的慢查询
- 4、分析只含有select语句的慢查询
- 5、分析指定某个用户的慢查询
- 6、分析所有的全表扫描或full join的慢查询
- 五、输出结果
- 1、总体统计结果
- 2、查询分组统计结果
- 3:每一种查询的详细统计结果
【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%位置截止。 |
–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可以分析一段时间内的慢查询。 |
四、示例
-- 查看慢查询日志的路径:/data/mysql/data/dcbi-3306/log/slow.logshow 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 regionRank:排名,默认按查询时间降序排列,通过--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
Mysql——》pt-query-digest相关推荐
- 读薄《高性能MySql》(四)查询性能优化
读薄<高性能MySql>(一)MySql基本知识 读薄<高性能MySql>(二)Scheme与数据优化 读薄<高性能MySql>(三)索引优化 读薄<高性能M ...
- mysql优化之query优化
主要概述:在 MySQL 中有一个专门负责优化 SELECT 语句的优化器模块,这就是我们本节将要重点分析的 MySQL Optimizer,其主要的功能就是通过计算分析系统中收集的各种统计信息,为客 ...
- 《高性能MySQL》——架构与历史(笔记)
文章目录 一.MySQL架构与历史 1.1.1 连接管理与安全性 1.1.2 优化与执行 1.2 并发控制 1.2.1 读写锁 1.2.2 锁粒度(锁模式) 表锁(table lock) 行级锁(ro ...
- 《高性能MySQL》——服务器性能剖析(笔记)
文章目录 三.服务器性能剖析 3.1 性能优化简介 3.1.1 通过性能剖析进行优化 3.1.2 理解性能剖析 3.2 对应用程序进行性能剖析 3.3 剖析MySQL查询 3.3.1 剖析服务器负载 ...
- 《高性能MySQL》——MySQL基准测试(笔记)
文章目录 二.MySQL基准测试 2.1 为什么需要基准测试 2.2 基准测试的策略 2.2.1 测试何种指标 2.3 基准测试方法 2.3.1设计和规划基准测试 2.3.2 基准测试应该运行多长时间 ...
- mysql 树形结构_再读MySQL索引-《高性能MySQL》索引手记
最近工作中经常和MySQL打交道,当数据量小的时候,不同查询方式以及是否使用索引并无大碍,当数据量随着业务的成长急剧加速时,索引的重要性不言而喻. 本篇文章以<高性能MySQL>中的索引章 ...
- 《深入浅出Mysql》學習筆記--日志
四种日志 错误日志 二进制日志 慢查询日志 查询日志 1. 错误日志(.err) 严重错误信息记录 more x.err 2. 二进制日志(binlog) 记录DDL,DML(select除外) 用于 ...
- python3 mysql错误 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
pymysql错误: pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') pymy ...
- 《高可用MySQL》2 – 单机版MySQL主从配置
这里搭建的主从是最简单的单一主从复制(即一个Master和一个slave.没有不论什么的热机备份和多slave),该主从结构的基本拓扑图例如以下所看到的: 建立主要的主从复制能够总结为下面三个基本步骤 ...
最新文章
- 【新星计划】MATLAB绘制图形
- Spring Boot 自动配置原理
- opencv3.2.0 Cmake 3.8.0 + tdm-gcc-5.1.0-3
- excel实战应用案例100讲(十三)-使用Python 对 Excel文件进行批量操作
- 【1】MySQL的四种事务隔离级别
- Django模板层:内置模板标签if,for in(forloop.counter)with,url,spaceless,autoescape,verbatim,firstof,block,cycle
- Python批量提取Excel文件中的图片
- JAVA正则表达式及常用类
- loss值多少才算收敛_你了解TDS值是多少才是合格的吗?
- php缩略图 实例,php生成缩略图后填充白边的代码示例
- FLASK安装--兼收EZ_INSTALL及PIP
- 虚拟机出现ping DUP
- 小米6X 线刷兼救砖_解账户锁_纯净刷机包_教程
- Github删除历史提交记录的方法
- 从微软CEO纳德拉身上学习如何拯救一个企业
- xml 硕正报表_主要指标及功能清单
- 视易服务器系统装,windows2000视易星云点歌数据服务器安装方法和步骤.docx
- ERP系统模块完全解析──主生产计划MPS
- 江苏省徐州市科目三考场分析
- 【职场进阶】入职没有几天就离职是什么心态?