Preface
 
    Performance issues are what DBA most concerned thing.There're always a lot of SQL queries which maybe not using appropriated indexes cause bad perfoemance.Whenever that happens,we have to do some performance diagnosis immediately.In most scenarios,we will do that relies on slow log,but it's not enough or efficient I'm afraid.What's the better way then?Another tool of percona called "pt-query-digest" can solve these kind of issues.
 
Introduce
 
    pt-query-digest is a tool focus on log analysis.It is supported to analyze slow log,general log,binlog and so on in different ways.You can also use it to analyze logs and simultaneously put these informations into tables on remote host(server) that you specified.That's really convenient and flexible for us DBA to work efficiently in performance tuning.
 
Procedure
 
Usage
 Usage: pt-query-digest [OPTIONS] [FILES] [DSN]

Parameters introduce

 --limit -- Limit the output conents by count(defualt ) or percentage(default %).
--type -- Indicate a type(default "slowlog",else value is "genlog","binlog","tcpdump",etc.) you want to anaylze.
--processlist -- Analyze from "show processlist" result from specific host(need to input DSN).
--create-history-table -- Create a table to record infomation if use "--history"(default "true").
--create-review-table -- Create a table to record infomation if use "--review"(default "true").
--history -- Save query metrics(such as query time) into a given table which can be checked incremental difference later.
--review -- Save query classes into a given table for later review.It don't report same kind of class.
--output -- Specify the format of query result(default "report").
--since -- Give a specific time with time format of beginning.
--until -- Give a specific time with time format of end.
--group-by -- According to the atrribute of envents to group by(default "figerprint",else value is "tables"&"distill").
--order-by -- According to the atrribute of envents to sort by(default "Query_time:sum").
Examples
 
Make sure the slow log is enabled.
 (root@localhost mysql3306.sock)[(none)]::>show variables like '%slow%';
+---------------------------+----------+
| Variable_name | Value |
+---------------------------+----------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | ON |
| slow_launch_time | |
| slow_query_log | ON |
| slow_query_log_file | slow.log |
+---------------------------+----------+
rows in set (0.00 sec) (root@localhost mysql3306.sock)[(none)]::>show variables like '%long_query_time%';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
row in set (0.00 sec) (root@localhost mysql3306.sock)[(none)]::>show variables like '%log_output%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
row in set (0.00 sec)

Execute a slow query.

 (root@localhost mysql3306.sock)[(none)]::>select sleep();
+-----------+
| sleep() |
+-----------+
| |
+-----------+
row in set ( min 0.01 sec)

Check slow log for information of above slow query.

 [root@zlm2 :: /data/mysql/mysql3306/data]
#cat slow.log # Time: --23T07::.891778Z
# User@Host: root[root] @ localhost [] Id:
# Query_time: 60.001239 Lock_time: 0.000000 Rows_sent: Rows_examined:
SET timestamp=;
select sleep();

Use pt-query-digest analyze slow log file for more details.

 [root@zlm2 :: ~]
#pt-query-digest /data/mysql/mysql3306/data/slow.log # No events processed. -- Only if the slow query has finished,there will be a result of report. [root@zlm2 :: ~]
#pt-query-digest /data/mysql/mysql3306/data/slow.log # 180ms user time, system time, 25.59M rss, 221.68M vsz
# Current date: Sat Jun ::
# Hostname: zlm2
# Files: /data/mysql/mysql3306/data/slow.log
# Overall: total, unique, QPS, 0x concurrency ______________________
# Time range: all events occurred at --23T07::
# Attribute total min max avg % stddev median
# ============ ======= ======= ======= ======= ======= ======= =======
# Exec time 60s 60s 60s 60s 60s 60s
# Lock time
# Rows sent
# Rows examine
# Query size # Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============== ===== ======= ===== ======
# 0xF9A57DD5A41825CA 60.0012 100.0% 60.0012 0.00 SELECT # Query : QPS, 0x concurrency, ID 0xF9A57DD5A41825CA at byte ________
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: all events occurred at --23T07::
# Attribute pct total min max avg % stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count
# Exec time 60s 60s 60s 60s 60s 60s
# Lock time
# Rows sent
# Rows examine
# Query size
# String:
# Hosts localhost
# Users root
# Query_time distribution
# 1us
# 10us
# 100us
# 1ms
# 10ms
# 100ms
# 1s
# 10s+ ################################################################
# EXPLAIN /*!50100 PARTITIONS*/
select sleep()\G ###All the meaning of above is self-explanatory,you can check official document for details.###
Other expamples
 
1.Analyze general log.
 pt-query-digest --type=genlog /path/zlm2.log > report1.log

2.Analyze binlog.

 mysqlbinlog -vv --base64-output=decode-rows /path/mysql-bin. > mysql-bin000010.sql
pt-query-digest --type=binlog /path/mysql-bin000001.sql > report2.log

3.Analyze rawlog(It's a general txt file which contains SQL statement).

 echo "select sleep(10);">rawlog.log pt-query-digest --type=rawlog rawlog.log > report3.log

4.Analyze processlist(DSN is indispensable).

 pt-query-digest --processlist h=192.168.1.101,P=,u=repl,p=repl4slave > report4.log -- If connection failed,it will try every second.

5.Analyze tcpdump.

 tcpdump -s  -x -nn -q -tttt -i any -c  port  > tcpdump.log
pt-query-digest --type=tcpdump tcpdump.log > report5.log

6.Analyze slow log since last 24 hours.

 pt-query-digest --since=24h slow.log > report6.log

7.Analyze slow log since time until time.

 pt-query-digest --since '2018-06-23 08:30:00' --until '2018-06-23 10:30:00' slow.log > report7.log

8.Analyze slow log into view table("query_review" table will be created if not specify "-t") of remote host.

 pt-query-digest --review h=192.168.1.102,P=,u=repl,p=repl4slave,D=zlm,t=query_review slow.log > report8.log

9.Analyze slow log into history table("query_history" table will be created like above) of remote host.

 pt-query-digest --review h=192.168.1.102,P=,u=repl,p=repl4slave,D=zlm,t=query_history slow.log > report9.log
Summay
  • There're still some advanced useages I've not demonstrated such as "--group-by","--order-by" and "--filter",etc.
  • pt-query-digest is extraordinarily useful when doing performance diagnosis by different ways.
  • It's recommended to analyze logs on another node(maybe slave) instead of master to reduce consumption of CPU,Memory,IO,etc.
  • pt-query-digest can help you to find out the specific slow quries.Afterwards you can use MySQL profiling("set profiling=1;" then "show profiles;") to survey the perticular resources which are tremendously consumed.

Percona-Tookit工具包之pt-query-digest的更多相关文章

  1. [hdu 6191] Query on A Tree

    Query on A Tree Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Othe ...

  2. Mysql: pt-table-checksum 和 pt-table-sync 检查主从一致性,实验过程

    一.安装 percona 包 1.安装仓库的包 https://www.percona.com/doc/percona-repo-config/yum-repo.html sudo yum insta ...

  3. MySQL ProxySQL读写分离使用初探

    目的 在美团点评DBProxy读写分离使用说明文章中已经说明了使用目的,本文介绍ProxySQL的使用方法以及和DBProxy的性能差异.具体的介绍可以看官网的相关说明,并且这个中间件也是percon ...

  4. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)

    ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...

  5. Linux后台开发工具箱

    https://files-cdn.cnblogs.com/files/aquester/Linux后台开发工具箱.pdf 目录 目录 1 1. 前言 3 2. 脚本类工具 3 2.1. sed命令- ...

  6. MySQL 使用pt-table-checksum 检查主从数据一致性 (实例转)

    1.基本环境: Mysql版本:5.6.12-log Percona-toolkit:2.2.18 Linux:centos6.5 2.安装 源码安装: # 一些依赖包 yum install per ...

  7. Linux后台开发工具箱-葵花宝典

    Linux后台开发工具箱-葵花宝典 一见 2016/11/4 目录 目录 1 1. 前言 4 2. 脚本类工具 4 2.1. 双引号和单引号 4 2.2. 取脚本完整文件路径 5 2.3. 环境变量和 ...

  8. 推荐几款MySQL相关工具

    前言: 随着互联网技术的不断发展, MySQL 相关生态也越来越完善,越来越多的工具涌现出来.一些公司或个人纷纷开源出一些不错的工具,本篇文章主要介绍几款 MySQL 相关实用工具.提醒下,这里并不介 ...

  9. pt-table-checksum

    pt-table-checksum是percona公司提供的一个用于在线比对主从数据一致性的工具. 实现原理 将一张大表分成多个chunk,每次针对一个chunk进行校验,同时将校验的结果通过REPL ...

  10. [知识库分享系列] 二、.NET(ASP.NET)

    最近时间又有了新的想法,当我用新的眼光在整理一些很老的知识库时,发现很多东西都已经过时,或者是很基础很零碎的知识点.如果分享出去大家不看倒好,更担心的是会误人子弟,但为了保证此系列的完整,还是选择分享 ...

随机推荐

  1. rem,em,px

    http://pxtoem.com/  px,em,rem单位转换工具 px(Pixel)根据显示屏分辨率,固定大小 em,根据父元素大小进行改变 rem,根据html进行相对改变 em 1. bod ...

  2. JDBC实现动态查询

    一 概述 1.什么是动态查询? 从多个查询条件中随机选择若干个组合成一个DQL语句进行查询,这一过程叫做动态查询. 2.动态查询的难点 可供选择的查询条件多,组合情况多,难以一一列举. 3.最终查询语 ...

  3. html5 嵌入元素 img map areaiframe embed meter object meter

    <img src="路径">            src 路径可以是img.jpg 也可以是 绝对和相对路径+img.jpg <img src="路径 ...

  4. 刚在虚拟机上装的Linux系统,ifconfig后IP地址怎么成了127.0.0.1了

    之前在虚拟机上装了Linux系统,用了一段时间后想删除了重新装一下,然而装完以后ifconfig后,出现的是 [root@localhost ~]# ifconfig lo Link encap:Lo ...

  5. 安装lombok(eclipse)

    下载 lombok.jar (https://projectlombok.org/download.html) 将 lombok.jar 放在eclipse安装目录下,和 eclipse.ini 文件 ...

  6. 【Linux】unix/Linux常用命令英文全称

    英文全称解释更容易理解 知其然,更要知其所以然 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Print working directory 显示当前工作路径. su ...

  7. Struts1.x 中处理乱码及通过标签显示数据

    1.通过filter解决乱码问题 网页的请求到达之前,先要经过filter的处理: 提取数据出现乱码:request.setCharacterEncoding("UTF-8"); ...

  8. ARM 虚拟机使用同一个公共 IP 访问公网的解决方案

    ARM 虚拟机使用同一个公共 IP 访问公网的解决方案 2017-2-21 作者 Azure 目前有两种部署模型:资源管理器 ARM 和经典部署模型 ASM.ASM 的虚拟机默认公用云服务的 VIP ...

  9. mysql_01_游标的使用

    一.表的创建 1.直接创建表 DROP TABLE IF EXISTS shops_info; /*EMP产品版本版本信息表*/ CREATE TABLE shops_info ( ID INT PR ...

  10. 通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法

    Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它. 而容器产生的数据,会随着Pod消亡而自动 ...