pt-query-digest
pt-query-digest:官方地址
說明
用途:用於分析日誌、PROCESSLIST或TCPDUMP中的查詢。
pt-query-digest分析來自慢查詢、一般和二進制日誌文件的MySQL查詢。它還可以分析來自SHOW PROCESSLIST
的查詢和來自tcpdump的MySQL協議數據。
會將相同的SQL語句進行分組,計算運行時間、設計數據量大小、平均運行時間等。
如:
# Profile
# Rank Query ID Response time Calls R/Call V/M
# ==== ========================== ================= ====== ======== =====
# 1 0xFFFCA4D67EA0A78881303... 862601.1637 75.9% 227903 3.7849 7.75 COMMIT
# 2 0x88DF2BB1B9C880C808644... 21683.4226 1.9% 70 309.7632 21... SELECT B_MONITOR_ITEM B_WARN_ITEM B_MONITOR_ITEM B_WARN_ITEM B_MONITOR_ITEM B_WARN_ITEM B_MONITOR_ITEM B_WARN_ITEM B_WARN_LEVEL B_TRIGGER_RULE B_WARN_CONFIG
# 3 0x3730FE7713A4FDD9969D8... 16921.3265 1.5% 590 28.6802 94.03 INSERT CPU
# 4 0xEEA71CBEC45A0FC311A27... 16102.5233 1.4% 446 36.1043 83.47 INSERT MONITOR_IO
# 5 0xA179FD9F11A7534079065... 14763.5261 1.3% 315 46.8683 22... SELECT
# 6 0x2E09446E39E26D4228FC5... 14271.2467 1.3% 1049 13.6046 86.55 SHOW GLOBAL STATUS
# 7 0x80AEBDBE9DD8458C3AEAA... 12499.6690 1.1% 490 25.5095 14.47 SET
# 8 0xE354C33516DDE664D4B2C... 11851.6269 1.0% 308 38.4793 80.57 INSERT MONITOR_NET
# 9 0x5783BF90097A2A1A9CF97... 8731.4926 0.8% 469 18.6173 97.85 INSERT MYSQL_MONITOR_SINGLE
# 10 0x7804C4793C7E78E15BD1D... 7645.1394 0.7% 1089 7.0203 88.46 INSERT MONITOR_IO
# 11 0xA2A048A4DDFF20FECBAC4... 6950.2792 0.6% 165 42.1229 10... INSERT WARN_INFO
# 12 0x683364692E9888355E12E... 6757.6127 0.6% 89 75.9282 63.73 INSERT MONITOR_SYSTEM_LOAD
# 13 0x066B074B099ADC1C2C92B... 6529.4115 0.6% 237 27.5503 12... INSERT MONITOR_IOPS
...略
具體例子
分析慢查詢日誌
pt-query-digest /var/lib/mysql/mysql.slow
也可以通過--filter
命令過濾指定的SQL
pt-query-digest slow.log \
--no-report \
--output slowlog \
--filter '$event->{fingerprint} \
&& make_checksum($event->{fingerprint}) eq "FDEA8D2993C9CAF3"'
FDEA8D2993C9CAF3
是該SQL的checksum,如下:
# Query 10: 4.50 QPS, 0.00x concurrency, ID 0xFDEA8D2993C9CAF3 at byte 355662
按照格式化後的SQL分組,按照運行時間排序
pt-query-digest \
--group-by fingerprint \
--order-by Query_time:sum \
--limit 10 \
slow.log
格式化後的sql
原SQL:
SELECT name, password FROM user WHERE id='12823';
select name, password from user
where id=5;
格式化後:
select name, password from user where id=?
從SHOW PROCESSLIST
中分析查詢
pt-query-digest --processlist h=127.0.0.1,p=123,P=3306,u=root
分析tcpdump
捕獲的MySQL協議數據
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt