pt-query-digest实战

官方网站

安装

apt install percona-toolkit

开启MySQL慢查询日志

  • 登录MySQL
mysql -u root -p
  • 开启慢查询日志
SET GLOBAL slow_query_log = 1;
  • 指定慢查询日志文件的路径和文件名
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
  • 指定慢查询阈值(10秒)
SET GLOBAL long_query_time = 10;

获取慢查询日志mysql-slow.log

# Time: 2022-03-01T10:00:00.000000Z
# User@Host: test[test] @ localhost []  Id: 111
# Query_time: 0.001293  Lock_time: 0.000543 Rows_sent: 1  Rows_examined: 0
SET timestamp=1646149200;
SELECT 1;

# Time: 2022-03-01T10:00:01.000000Z
# User@Host: test[test] @ localhost []  Id: 111
# Query_time: 0.002345  Lock_time: 0.001098 Rows_sent: 10  Rows_examined: 100
SET timestamp=1646149201;
SELECT * FROM test_table WHERE id BETWEEN 1 AND 10;

# Time: 2022-03-01T10:00:02.000000Z
# User@Host: test[test] @ localhost []  Id: 111
# Query_time: 1.000012  Lock_time: 0.000000 Rows_sent: 100  Rows_examined: 1000
SET timestamp=1646149202;
SELECT * FROM test_table WHERE id BETWEEN 1 AND 100;

# Time: 2022-03-01T10:00:03.000000Z
# User@Host: test[test] @ localhost []  Id: 111
# Query_time: 0.000987  Lock_time: 0.000200 Rows_sent: 1  Rows_examined: 10
SET timestamp=1646149203;
SELECT COUNT(*) FROM test_table;

# Time: 2022-03-01T10:00:04.000000Z
# User@Host: test[test] @ localhost []  Id: 111
# Query_time: 5.000125  Lock_time: 0.000000 Rows_sent: 1000  Rows_examined: 10000
SET timestamp=1646149204;
SELECT * FROM test_table;

# Time: 2022-03-01T10:00:05.000000Z
# User@Host: test[test] @ localhost []  Id: 111
# Query_time: 0.000876  Lock_time: 0.000120 Rows_sent: 1  Rows_examined: 0
SET timestamp=1646149205;
SELECT DATABASE();

使用pt-query-digest 分析

pt-query-digest mysql-slow.log

//指定数据库
pt-query-digest mysql-slow.log --type=slowlog --filter '($event->{db} || "") =~ m/^database/i'
//指定用户
pt-query-digest mysql-slow.log --type=slowlog --filter '($event->{user} || "") =~ m/^user/i'
//指定IP
pt-query-digest mysql-slow.log --type=slowlog --filter '($event->{host} || $event->{ip} || "") =~ m/^192.168.1.*/i'
//分析指定时间范围
pt-query-digest mysql-slow.log --type=slowlog --since='2023-03-01 15:49:47' --until='2023-03-01 15:52:55'
pt-query-digest mysql-slow.log --type=slowlog --since='1583048987' --until='1583049175'
//分析最近10h
pt-query-digest test2-slow.log --type=slowlog --since='10h'
//分析指定查询:update
pt-query-digest test2-slow.log_bak --type=slowlog --filter '$event->{arg} =~ m/^update/i'
//完全体
pt-query-digest 
--user=root #
--password=root 
--port=3306 
--review h=192.168.163.132,D=slow_query_log,t=review //重复的sql只保存一条到review表用来审计
--history h=192.168.163.132,D=slow_query_log,t=history //每一条sql都会保存到history表
--limit=0% 
--filter='($event->{Bytes} = length($event->{arg}) and $event->{hostname}="test2") and ($event->{host} || $event->{ip}) !~ m/^localhost$|^192.168.163.1$/i and $event->{arg} =~ m/^select/i' 
--since='2020-03-23 12:00:00' --until='2020-03-23 13:00:00'  //各种筛选条件
/usr/local/mysql/logs/slow.log  //日志路径
--no-report //结果直接输出到表,不需要打印到终端

结果分析

//pt-query-digest执行所使用的的用户时间,系统时间,内存,虚拟内存
# 150ms user time, 20ms system time, 36.27M rss, 102.75M vsz
//pt-query-digest执行时间
# Current date: Fri Mar  3 16:37:05 2023
//主机名
# Hostname: power
//被分析的文件名
# Files: slow_query.log
//执行SQL总数,去重之后的总数,QPS,并发数
# Overall: 1 total, 1 unique, 0 QPS, 0x concurrency ______________________
//日志记录的时间范围
# Time range: 2023-03-04T01:56:04 to 2023-03-04T02:12:07
//属性               总计       最小    最大    平均          标准    中等
# Attribute          total     min     max     avg     95%  stddev  median
# ============     ======= ======= ======= ======= ======= ======= =======
//执行时间
# Exec time            35s      4s      9s      6s      8s      1s      5s
//锁占用时间
# Lock time            5ms    53us     5ms   905us     5ms     2ms   219us
//发送到客户端的行数
# Rows sent          2.00M       0   2.00M 341.68k   1.95M 744.61k  964.41
//扫描的语句行数
# Rows examine      11.00M   1.00M   2.00M   1.83M   1.95M 368.61k   1.95M
//查询的字节数
# Query size           963      20     408  160.50  400.73  165.68  215.41

//简况  一般看这里就能获取你想要的慢查询日志
# Profile
//查询时间倒序排名,hash id,响应时间,占用时间比率,调用次数,平均每次执行时间,V/M/,SQL语句 
# Rank Query ID           Response time Calls R/Call V/M   Item
# ==== ================== ============= ===== ====== ===== ===============
#    1 0x4B011C30D4CF7E58 15.8347 45.8%     3 5.2782  0.00 SELECT shake.person
#    2 0x2DF3B3EE79EB84C8  8.8817 25.7%     1 8.8817  0.00 INSERT SELECT person
#    3 0x17B04D5C3A71462A  5.7755 16.7%     1 5.7755  0.00 SELECT person
#    4 0xA154BD79BFEB9904  4.0845 11.8%     1 4.0845  0.00 INSERT SELECT person

//下面开始按Profile 顺序 输出每列查询的详细信息
# Query 1: 0.00 QPS, 0.02x concurrency, ID 0x4B011C30D4CF7E58 at byte 1419
# This item is included in the report because it matches --limit.
# Scores: V/M = 0.00
# Time range: 2023-03-04T01:57:16 to 2023-03-04T02:12:07
//属性         百分比 总数
# Attribute    pct   total     min     max     avg     95%  stddev  median
# ============ === ======= ======= ======= ======= ======= ======= =======
//次数
# Count         50       3
# Exec time     45     16s      5s      5s      5s      5s    81ms      5s
# Lock time      8   473us    53us   314us   157us   301us   107us   103us
# Rows sent      0   2.10k     152    1000  717.33  964.41  383.43  964.41
# Rows examine  54   6.00M   2.00M   2.00M   2.00M   1.95M       0   1.95M
# Query size    15     148      49      50   49.33   49.17    0.50   46.83
# String:
# Databases    shake
# Hosts        localhost
# Users        root
# Query_time distribution
#   1us
#  10us
# 100us
#   1ms
#  10ms
# 100ms
#    1s  ################################################################
#  10s+
# Tables
#    SHOW TABLE STATUS FROM `shake` LIKE 'person'\G
#    SHOW CREATE TABLE `shake`.`person`\G
# EXPLAIN /*!50100 PARTITIONS*/
SELECT * FROM `shake`.`person` LIMIT 2097000,1000\G

...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容