pt-kill 是 Percona Toolkit 核心組件,專治:閒置連線導致 max_connections 耗盡、問題 SQL 導致負載飆高。工作中遇到連線異常第一反應就是它,功能遠超自寫腳本。
# 每 10 秒殺掉所有 Sleep 連線 pt-kill --defaults-file=/etc/my.cnf --match-command Sleep --kill --victims all --interval 10 # 每 10 秒殺掉運行超過 60 秒的查詢 pt-kill --defaults-file=/etc/my.cnf --busy-time 60 --kill --victims all --interval 10
--daemonize:守護進程模式後台運行--interval N:檢查間隔,支援 s/m/h/d 後綴,預設秒oldest (預設):僅殺最久的一筆,防誤殺長期等待非真正慢查詢all:殺掉所有匹配連線all-but-oldest:殺掉除最久外所有匹配連線--kill:殺掉連線--kill-query:僅殺查詢,連線存活--print:列印匹配查詢 (建議首次部署先開啟觀察)--busy-time N:查詢執行時間超過 N 秒--idle-time N:閒置時間超過 N 秒 (需配合 --match-command Sleep)| 參數 | 用途 |
|---|---|
--busy-time | 運行時間閾值 |
--idle-time | 閒置時間閾值 |
--victims | 受害者策略 |
--interval | 檢查間隔 (預設 30s) |
--print | 列印被殺連線 |
--match-command | 匹配 Command (Query/Sleep/Binlog Dump...) |
--match-state | 匹配 State (Locked/Sending data/Sorting...) |
--match-info | 正則匹配 SQL 文本 |
--match-db/user/host | 匹配庫/用戶/主機 |
# 殺閒置連線 pt-kill --match-command Sleep --idle-time 5 --host=H --port=P --interval=1 --print --kill --victims all # 殺長查詢 pt-kill --match-command Query --busy-time 5 --host=H --port=P --interval=1 --print --kill --victims all # 殺特定 SQL pt-kill --match-command Query --busy-time 5 --match-info "BAD_SQL" --host=H --port=P --interval=1 --print --kill --victims all # 殺 Filesort pt-kill --match-command Query --match-state "Sorting result" --busy-time 5 --host=H --port=P --interval=1 --print --kill --victims all # 殺臨時表 pt-kill --match-command Query --match-state "Copying to tmp table" --busy-time 5 --host=H --port=P --interval=1 --print --kill --victims all
https://www.percona.com/doc/percona-toolkit/2.1/pt-kill.html