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. CSS Hack兼容

    CSS中有很多标签在不同浏览器中有不同的兼容性问题,问了让网页的功能更好的不同浏览器中显示正常, 需要通过hack的方式来解决浏览器兼容问题. CSS hack问题由来已久,目前我的了解甚少,以下是转 ...

  2. jquery hover(overListener, outListener) || bind('mouseover',methodA).bind('mouseout',methodB)

    1.区别: bind方式,进入外部区域和内部区域都会触发相关方法(methodA 或methodB): hover方式,进入内部区域不会再触发相关方法. 2.example: <body> ...

  3. 洛谷P1941 飞扬的小鸟(背包 dp)

    题意 题目链接 Sol 很显然的dp,设\(f[i][j]\)表示第\(i\)个位置,高度为\(j\)的最小步数 向上转移的时候是完全背包 向下转移判断一下就可以 #include<bits/s ...

  4. git 创建远程版本库(亲测有效)

    一.github远程版本库 1.创建SSH Key(windows)   ssh-keygen -t rsa -C "youremail@example.com"   2.连接版本 ...

  5. 首页的css

    html,body{ margin:; padding:; background-color: lavenderblush; } a{ color:darkgray; } li{ list-style ...

  6. CSS动画效果

    CSS变形效果 Transform translate:平移 translate(x,y) translateX(x) translateY(y)相对于元素原始位置平移. scale:缩放 大于1放大 ...

  7. 区域可编辑contenteditable的问题总结

    一.如何在可编辑区域div的光标处通过点击事件来添加文本内容 下面的例子是可编辑div的区域添加文本内容和判断光标位置的方法 <!DOCTYPE html> <html lang=& ...

  8. supervisor运行virtualenv环境下的nagios-api

    supervisord-example.conf [unix_http_server] file=/tmp/supervisor.sock ; path to your socket file [su ...

  9. adb工具包究竟能帮我们做什么?

    adb工具包主要作用于什么呢?应该有很多用户都不了解adb,那就一起来了解一下吧!adb的全称为Android Debug Bridge,就是起到调试桥的作用. 借助adb工具,我们可以管理设备或手机 ...

  10. ZT 头文件包含其实是一想很烦琐的工作 第一个原则应该是,如果可以不包含头文件

    当出现访问类的函数或者需要确定类大小的时候,才需要用头文件(使用其类定义)    http://blog.csdn.net/clever101/article/details/4751717 看到这个 ...