pt-query-digest

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: pt-query-digest可以用来分析binlog、General log、slowlog,也可以通过show processlist或者通过tcpdump抓取的MySQL协议数据来进行分析用法:(1)直接分析slow日志: pt-query-digest INDEX01184W-slow.

pt-query-digest

可以用来分析binlog、General log、slowlog,也可以通过show processlist或者通过tcpdump抓取的MySQL协议数据来进行分析


用法:


(1)直接分析slow日志:

 pt-query-digest INDEX01184W-slow.log > slow_report1.log


(2)分析最近12小时内的查询:

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


(3)分析指定时间范围内的查询:

#pt-query-digest  --since '2017-02-01 09:30:00' --until '2017-03-01 10:00:00' INDEX01184W-slow.log >> slow_report3.log


(4)分析指含有select语句的慢查询

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


(5) 针对某个用户的慢查询

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


(6) 查询所有所有的全表扫描或full join的慢查询

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


(7)把查询保存到query_review表(#默认会创建percona_schema库和query_review表 )

 pt-query-digest --user=root --password=147258 --review h=localhost INDEX01184W-slow.log 


(8)把查询保存到query_history表

pt-query-digest  --user=root –password=abc123 --review  h=localhost INDEX01184W-slow.log


(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.000003 > mysql-bin000003.sql

pt-query-digest  --type=binlog  mysql-bin000003.sql > slow_report10.log


(11)分析general log

pt-query-digest  --type=genlog  general.log > slow_report11.log


例:

#查询两条慢SQL:

root@localhost [(none)]>select sleep(3);

+----------+

| sleep(3) |

+----------+

|        0 |

+----------+

1 row in set (3.70 sec)

root@localhost [(none)]>select sleep(4);

+----------+

| sleep(4) |

+----------+

|        0 |

+----------+

1 row in set (4.02 sec)

root@localhost [(none)]>select sleep(8);

+----------+

| sleep(8) |

+----------+

|        0 |

+----------+

1 row in set (8.07 sec)


#查看slow日志,可以发现会记录上面两条SQL:

[root@Darren1 data]# cat slow.log

# Time: 2017-06-02T05:06:04.452125Z

# User@Host: root[root] @ localhost []  Id:  5565

# Query_time: 3.665139  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0

SET timestamp=1496379964;

select sleep(3);

# Time: 2017-06-02T05:35:42.145231Z

# User@Host: root[root] @ localhost []  Id:  6454

# Query_time: 4.013508  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0

SET timestamp=1496381742;

select sleep(4);

# Time: 2017-06-02T07:29:33.820712Z

# User@Host: root[root] @ localhost []  Id:  9867

# Query_time: 8.032160  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0

SET timestamp=1496388573;

select sleep(8);


#使用pt-query-digest分析slow日志文件:

[root@Darren1 data]# pt-query-digest slow.log

# 170ms user time, 70ms system time, 24.36M rss, 204.71M vsz

# Current date: Fri Jun  2 15:30:17 2017

# Hostname: Darren1

# Files: slow.log

# Overall: 3 total, 1 unique, 0.00 QPS, 0.00x concurrency ________________

# Time range: 2017-06-02T05:06:04 to 2017-06-02T07:29:33

# Attribute          total     min     max     avg     95%  stddev  median

# ============     ======= ======= ======= ======= ======= ======= =======

# Exec time            16s      4s      8s      5s      8s      2s      4s

# Lock time              0       0       0       0       0       0       0

# Rows sent              3       1       1       1       1       0       1

# Rows examine           0       0       0       0       0       0       0

# Query size            45      15      15      15      15       0      15


第一部分:

Overall: 总共有多少条查询,上例为总共3个查询

unique: 对SQL进行分类,总的SQL种类,上例为1种

Time range: 查询执行的时间范围

total: 总计   min:最小   max: 最大  avg:平均

95%: 把所有值从小到大排列,位置位于95%的那个数,这个数一般最具有参考价值。

median: 中位数,把所有值从小到大排列,位置位于中间那个数。

# Profile

# Rank Query ID           Response time  Calls R/Call V/M   Item

# ==== ================== ============== ===== ====== ===== ======

#    1 0xF9A57DD5A41825CA 15.7108 100.0%     3 5.2369  0.68 SELECT


第二部分:

对SQL进行分组,然后对各类查询的执行情况进行分析,结果按总执行时长,从大到小排序。

Response: 总的响应时间。

time: 该查询在本次分析中总的时间占比。

calls: 执行次数,即本次分析总共有多少条这种类型的查询语句。

R/Call: 平均每次执行的响应时间。

Item : 查询对象

# Query 1: 0.00 QPS, 0.00x concurrency, ID 0xF9A57DD5A41825CA at byte 409

# This item is included in the report because it matches --limit.

# Scores: V/M = 0.68

# Time range: 2017-06-02T05:06:04 to 2017-06-02T07:29:33

# Attribute    pct   total     min     max     avg     95%  stddev  median

# ============ === ======= ======= ======= ======= ======= ======= =======

# Count        100       3

# Exec time    100     16s      4s      8s      5s      8s      2s      4s

# Lock time      0       0       0       0       0       0       0       0

# Rows sent    100       3       1       1       1       1       0       1

# Rows examine   0       0       0       0       0       0       0       0

# Query size   100      45      15      15      15      15       0      15

# String:

# Hosts        localhost

# Users        root

# Query_time distribution

#   1us

#  10us

# 100us

#   1ms

#  10ms

# 100ms

#    1s  ################################################################

#  10s+

# EXPLAIN /*!50100 PARTITIONS*/

select sleep(8)\G


第三部分:

Databases: 库名

Users: 各个用户执行的次数(占比)

Query_time distribution : 查询时间分布图, 长短体现区间占比,本例中SQL处于1s-10s。

Tables: 查询中涉及到的表

Explain: 示例

#把分析结果记录到表中DSN

[root@Darren1 data]# pt-query-digest --user=root --password=147258 --review h=localhost slow.log 

root@localhost [percona_schema]>select * from percona_schema.query_review\G

......

*************************** 2. row ***************************

   checksum: 17988922643135866314

fingerprint: select sleep(?)

     sample: select sleep(8)

 first_seen: 2017-06-02 05:06:04

  last_seen: 2017-06-02 07:29:33

reviewed_by: NULL

reviewed_on: NULL

   comments: NULL

2 rows in set (0.00 sec)


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
索引 Python
Pandas 高级教程——高级时间序列分析
Pandas 高级教程——高级时间序列分析
614 4
|
SQL 监控 关系型数据库
使用 pt-query-digest 工具分析 MySQL 慢日志
【8月更文挑战第5天】使用 pt-query-digest 工具分析 MySQL 慢日志
552 3
使用 pt-query-digest 工具分析 MySQL 慢日志
|
3月前
|
存储 数据管理 Apache
Doris建表分桶选择与优化建议
Apache Doris 中的分桶(Bucketing)是提升查询性能的重要优化手段。通过合理选择分桶列和分桶数,可提高数据并行处理能力与局部性。建议选用高基数、高频查询列作为分桶列,结合数据量与集群规模设置分桶数,推荐使用自动分桶(BUCKETS AUTO)。分桶策略包括哈希分桶与范围分桶,适用于不同场景。合理分桶可优化查询性能、导入效率与资源利用率,建议结合业务特征测试验证最佳方案。
272 0
|
11月前
|
安全 网络安全 数据安全/隐私保护
Flask框架的安全机制与其他框架相比有哪些优势和劣势?
总的来说,Flask 的安全机制在灵活性和可扩展性方面有其独特优势,但也需要开发者在安全方面投入更多的精力和努力,以确保应用的安全可靠运行。
264 12
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
747 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
|
存储 安全 算法
Linux命令sha1sum的详细解析
`sha1sum`是Linux下的命令行工具,用于计算文件的SHA-1哈希值,用于验证文件完整性和安全性。SHA-1算法将数据转化为160位的哈希值,具有唯一性、固定长度和单向性。命令支持二进制或文本模式,可检查校验文件、保存哈希值、验证文件完整性。尽管由于安全问题不推荐用于高安全场景,但在一些场景下仍用于文件校验。最佳实践包括定期验证、保存校验文件和与其他命令结合使用。
|
缓存 监控 Java
Spring Boot应用的性能监控与优化
Spring Boot应用的性能监控与优化
|
关系型数据库 MySQL Linux
DolphinScheduler2.x 伪分布式部署
DolphinScheduler2.x 伪分布式部署
382 0
如何将Doris的COLLECT_LIST结果用在另一个查询的条件语句里
【4月更文挑战第21天】如何将Doris的COLLECT_LIST结果用在另一个查询的条件语句里
404 0
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL企业版与标准版功能对比:如何选择适合您的版本?
随着数字化时代的到来,企业对于数据处理的需求越来越高,而数据库作为数据处理的核心,其性能和成本成为了企业关注的焦点。阿里云全新推出的PolarDB MySQL企业版和标准版,以全新的架构和优化,为企业提供了高性能、低成本的数据库解决方案。但在功能上,这两个版本有很多差异,我们该如何选择呢?
331 2