Percona-tookit学习笔记(三)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

pt-query-digest

功能:

    根据一些规则分析查询语句,对可能的问题提出建议


说明:

    pt-query-digest可以从普通MySQL日志,慢查询日志以及二进制日志中分析查询,甚至可以从SHOW PROCESSLIST和MySQL协议的tcpdump中进行分析,如果没有指定文件,它从标准输入流(STDIN)中读取数据。

整体概要(Overall)


示例:

1
# pt-query-digest/usr/local/mariadb/var/node2-slow.log > /root/mysql-slow.log


# 这个部分是一个大致的概要信息(类似loadrunner给出的概要信息),通过它可以对当前MySQL的查询性能做一个初步的评估,比如各个指标的最大值(max),平# 均值(min),95%分布值,中位数(median),标准偏差(stddev)。这些指标有查询的执行时间(Exec time),锁占用的时间(Lock time),MySQL执行器需要# 检查的行数(Rowsexamine),最后返回给客户端的行数(Rows sent),查询的大小。

# 290ms user time, 20ms system time, 26.31Mrss, 215.15M vsz

# Current date: Mon May  9 14:18:13 2016

# Hostname: localhost.localdomain

# Files: /data/mysql/localhost-slow.log

# Overall: 17 total, 4 unique,0.00 QPS, 0.00x concurrency _______________  整体概要信息

# 上一行的含义:17个操作,4个语句,QPS太低了,所以显示为0

# Time range: 2016-04-10 19:57:45 to2016-04-29 14:27:38

# Attribute          total     min    max     avg     95% stddev  median

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

# Exec time          2751s     27s   938s    162s    464s   223s     60s

# Lock time            2ms    43us  434us   120us   424us  124us    53us

# Rows sent         81.79k      47 20.74k   4.81k  20.37k  7.99k  329.68

# Rows examine     345.13k      47 75.68k  20.30k  72.41k 30.48k  329.68

# Query size         2.34k      25    881     141  284.79 212.96   38.53

 

下面是查询的摘要信息(Profile)

这个部分对所有”重要”的查询(通常是比较慢的查询)做了个一览表:

每个查询都有一个Query ID,这个ID通过Hash计算出来的。pt-query-digest是根据这个所谓的Fingerprint来group by的。


# Profile

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

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

#   1 0x1F830B61B2FB68F0 2238.7287 81.4%    8 279.8411 28... SELECT ecs_goods

#    2 0x1FADF8A6BD46B153  244.0573 8.9%     4  61.0143 0.00 SELECT create_sn admin_user agent_sn

#   3 0xB1A36F5B279696D1 241.4298  8.8%     4 60.3574  0.00 SELECT ecs_goods

# MISC 0xMISC               26.8954  1.0%    1  26.8954   0.0 <1 ITEMS>

如下图:

wKioL1cyyfPh3zZcAABi2lWvMw4349.png

Rank            整个分析中该“语句”的排名,一般也就是性能最差的。

Response time   “语句”的响应时间以及整体占比情况。

Calls           该“语句”的执行次数。

R/Call          每次执行的平均响应时间【ResponseTime/Calls】。

V/M             响应时间的差异平均对比率。

Item            显示了其他2个占比较低而不值得单独显示的查询的统计数据。



下面是每条SQL的详细报告

这个部分会列出Profile表中每个查询的详细信息:

# Query 1: 0.00 QPS, 0.00x concurrency, ID0x1F830B61B2FB68F0 at byte 0 __

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

# Scores: V/M = 286.15

# Time range: 2016-04-10 19:57:45 to2016-04-26 12:51:19

# Attribute    pct  total     min     max    avg     95%  stddev median

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

# Count         47       8

# Exec time     81  2239s     40s    938s   280s    918s    283s   285s

# Lock time     16  345us    43us    44us   43us    42us       0   42us

# Rows sent      3  2.47k      47     489 316.38  487.09  113.03 329.68

# Rows examine   0  2.47k      47     489 316.38  487.09  113.03 329.68

# Query size     8    200      25      25     25      25       0     25

# String:

# Databases    b2b

# Hosts        116.228.235.114

# Users        b2b (5/62%), b2b_user (3/37%)

# Query_time distribution

#  1us

# 10us

# 100us

#  1ms

# 10ms

# 100ms

#   1s

# 10s+  ################################################################

# Tables

#   SHOW TABLE STATUS FROM `b2b` LIKE 'ecs_goods'\G

#   SHOW CREATE TABLE `b2b`.`ecs_goods`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT * FROM `ecs_goods`\G

 

# Query 2: 0.25 QPS, 15.25x concurrency, ID0x1FADF8A6BD46B153 at byte 4730

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

# Scores: V/M = 0.00

# Time range: 2016-04-28 15:17:28 to15:17:44

# Attribute    pct  total     min     max    avg     95%  stddev median

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

# Count         23       4

# Exec time      8   244s     61s     61s    61s     60s       0    60s

# Lock time     62    1ms   193us   434us  318us   424us   112us  424us

# Rows sent     94 77.67k  16.33k  20.74k 19.42k  20.37k   1.81k 20.37k

# Rows examine  86 297.44k 71.27k  75.68k  74.36k 72.41k   1.49k  72.41k

# Query size    48  1.13k     290     290    290     290       0    290

# String:

# Databases    KF_Mobile

# Hosts        116.228.235.114

# Users        KF_Mobile_user

# Query_time distribution

#  1us

# 10us

# 100us

#  1ms

# 10ms

# 100ms

#   1s

# 10s+ ################################################################

# Tables

#   SHOW TABLE STATUS FROM `KF_Mobile` LIKE 'create_sn'\G

#   SHOW CREATE TABLE `KF_Mobile`.`create_sn`\G

#   SHOW TABLE STATUS FROM `KF_Mobile` LIKE 'admin_user'\G

#   SHOW CREATE TABLE `KF_Mobile`.`admin_user`\G

#   SHOW TABLE STATUS FROM `KF_Mobile` LIKE 'agent_sn'\G

#   SHOW CREATE TABLE `KF_Mobile`.`agent_sn`\G

# EXPLAIN /*!50100 PARTITIONS*/

#select * from (

 select distincts.*,u.OEM_name,u.admin_account,IFNULL(i.active_state,'00') AS state fromcreate_sn s left

 joinadmin_user u on s.agent_id=u.agent_id left join agent_sn i on i.sn_num=s.sn_num

 ##)n

 ##WHERE n.agent_id='84872355' order byn.create_date desc 84872355\G

 

# Query 3: 0.00 QPS, 0.00x concurrency, ID0xB1A36F5B279696D1 at byte 6896

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

# Scores: V/M = 0.00

# Time range: 2016-04-25 19:13:19 to2016-04-29 14:27:38

# Attribute    pct  total     min     max    avg     95%  stddev median

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

# Count         23       4

# Exec time      8   241s     60s     60s    60s     60s       0    60s

# Lock time     12  263us    53us   100us   65us    98us    19us   54us

# Rows sent      1  1.26k     322     326 323.75  313.99       0 313.99

# Rows examine   0  1.26k     322     326 323.75  313.99       0 313.99

# Query size     6    156      39      39     39      39       0     39

# String:

# Databases    b2b

# Hosts        116.228.235.114

# Users        b2b (2/50%), b2b_user (2/50%)

# Query_time distribution

#  1us

#  10us

# 100us

#  1ms

# 10ms

# 100ms

#   1s

# 10s+ ################################################################

# Tables

#   SHOW TABLE STATUS FROM `b2b` LIKE 'ecs_goods'\G

#   SHOW CREATE TABLE `b2b`.`ecs_goods`\G

# EXPLAIN /*!50100 PARTITIONS*/

SELECT * FROM `ecs_goods` LIMIT 0, 1000\



另外,可以从tcpdump中分析:

因为慢日志方式需要重新连接,而生产环境重启中间件是非常昂贵的操作。

所以在数据库服务器上抓包分析也是一种不错的选择。

1
2
3
pt-query-digest对于抓包有一定的格式。(-x -nn -q -tttt)
-s:源端口
-c:抓包的数量


操作步骤:

1
2
3
4
1、抓包
     tcpdump-s 65535 -x -nn -q -tttt -i any -c 100000 port 3306 > mysql.tcp.dmp
2、分析
     pt-query-digest--limit 20 -- type  tcpdump mysql.tcp.dmp


 

还有一些其他方法,没仔细搞过,贴一下吧:

1、从PROCESSLIST中查询某个MySQL中最慢的查询:

1
pt-query-digest -processlisth=host1 【操作失败,不知道原因】

 

2、从一台机器上讲slow log保存到另外一台机器上待稍后详细分析:

1
2
pt-query-digest --reviewh=host2 --no-report  /usr/local/mariadb/var/node2-slow .log
建议:当slow log很大的时候最好还是将日志文件移到其他机器上进行分析。


 

还可以跟一些过滤条件。详见官方文档:http://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html

另外结合一些第三方工具还能生成相应的报表,可以参考这里:

http://biancheng.dnbcw.info/mysql/433514.html

http://blog.csdn.net/seteor/article/details/24017913










本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1772165,如需转载请自行联系原作者
相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
监控 关系型数据库 MySQL
MySQL percona-toolkit工具包的安装和使用(超详细版)
转载:https://www.cnblogs.com/zishengY/p/6852280.html 一.检查和安装与Perl相关的模块     PT工具是使用Perl语言编写和执行的,所以需要系统中有Perl环境。
2159 0
|
监控 关系型数据库 MySQL
|
关系型数据库 MySQL Unix
MySQL中的Percona-toolkit工具由来漫谈
首先问一个问题,你听说过下面这两个工具吗? Maatkit 和Aspersa 如果听过,可能就暴露年龄了,你如果现在去查Aspersa相关的文章,会发现下载链接之类的都不可用了。
1710 0
|
监控 MySQL 关系型数据库
|
关系型数据库 数据库 索引
|
SQL 关系型数据库 MySQL
|
SQL 监控 关系型数据库
|
关系型数据库 MySQL 数据库
|
Perl
percona-toolkit-3.0.4安装
percona-toolkit
1502 0