Percona Toolkit 的系統類與性能類工具能幫助 DBA 快速掌握主機健康狀態、捕獲間歇性故障現場、分析索引使用效率、可視化執行計劃。本文詳細介紹 pt-diskstats、pt-fifo-split、pt-summary、pt-stalk、pt-index-usage、pt-pmp、pt-visual-explain 七大工具的實戰用法。
類似 iostat 但更詳細、交互式,支持遠程採集數據分析。
# 監控所有磁盤 pt-diskstats # 僅監控 sda2 pt-diskstats --devices-regex sda2
模擬切割大文件並通過 FIFO 管道流式傳輸,避免一次性讀入內存,極適合 LOAD DATA INFILE 大數據導入。
# 每 100 萬行輸出一個 EOF 到默認 FIFO pt-fifo-split --lines 1000000 hugefile.txt while [ -e /tmp/pt-fifo-split ]; do cat /tmp/pt-fifo-split; done # 指定 FIFO 路徑並直接導入 MySQL pt-fifo-split infile.txt --fifo /tmp/my-fifo --lines 1000000 while [ -e /tmp/my-fifo ]; do mysql -e "set foreign_key_checks=0; set sql_log_bin=0; set unique_checks=0; load data local infile '/tmp/my-fifo' into table load_test fields terminated by '\t' lines terminated by '\n' (col1, col2);" sleep 1; done
非調優工具,產生易讀、易對比、易郵件分發的系統報告。建議 root 權限運行。
pt-summary
作為守護進程運行,監聽觸發條件(默認 SHOW GLOBAL STATUS),滿足閾值時自動採集數十種診斷數據(進程列表、InnoDB 狀態、磁盤、內存、網絡、鎖等),存入時間戳目錄。
# 觸發條件:Threads_running > 20,數據存 /tmp/test pt-stalk --function status --variable Threads_running --threshold 20 --dest /tmp/test -- -uroot -pzhang@123 -h192.168.3.135 # 觸發條件:Processlist 中 State=statistics 超過 20 個 pt-stalk --function processlist --variable State --match statistics --threshold 20 --dest /tmp/test -- -uroot -pzhang@123 -h192.168.3.135
採集產物示例:*-df、*-diskstats、*-innodbstatus1/2、*-processlist、*-top、*-vmstat 等。
從慢查詢/General Log 讀取 SQL,執行 EXPLAIN 分析索引使用,生成未被使用索引報告,或將結果寫入數據庫表。
# 直接輸出報告 pt-index-usage /data/dbdata/localhost-slow.log --host=localhost --user=root --password=zhang@123 # 寫入數據庫(自動建表) pt-index-usage /data/dbdata/localhost-slow.log --host=localhost --user=root --password=zhang@123 --no-report --create-save-results-database
對 MySQL 進程進行 GDB 堆棧跟蹤並聚合,快速定位卡住線程的代碼路徑。
pt-pmp -p 21933 pt-pmp -b /usr/local/mysql/bin/mysqld_safe
將 EXPLAIN 輸出轉為樹狀結構,極大降低閱讀理解成本。
# 分析包含 EXPLAIN 結果的文件 pt-visual-explain aaa # 分析包含 SQL 的文件,自動連接數據庫執行 EXPLAIN pt-visual-explain --connect aaa --user=root --password=zhang@123 # 管道直連 mysql -uroot -pzhang@123 -e "explain select email from test.collect_data where id=101992419" | pt-visual-explain