MySQL 連接數打滿、長查詢拖垮性能、Sleep 連接佔用槽位——這些場景下,手工 KILL 既慢又漏。pt-kill(Percona Toolkit 組件)專為「按規則批量、定時、自動化清理連接」而生,是 DBA 應急工具箱的必備利器。
| 參數 | 說明 | 典型值 |
|---|---|---|
--interval | 檢查間隔,單位 s/m/h/d | 10(10秒) |
--victims | 匹配到多個時殺誰 | all(全殺)、oldest(最久)、all-but-oldest(留最久) |
--daemonize | 後台守護進程模式運行 | 生產常駐必加 |
--kill | 殺掉連接(線程終止) | 徹底清理 |
--kill-query | 僅殺掉當前語句,保留連接 | 較溫和,適合長查詢 |
--print | 打印被殺連接信息(配合 --log 落盤) | 審計留痕 |
--busy-time | 查詢執行時間超過閾值(秒) | 60 |
--idle-time | Sleep 狀態超過閾值(秒) | 300,需配合 --match-command Sleep |
所有匹配參數支援 | 多值或正則,區分大小寫。
| 參數 | 匹配對象 | 常用值示例 |
|---|---|---|
--match-command | Command 列 | Query|Sleep|Execute |
--match-state | State 列 | Sending data|Locked|Sorting result |
--match-info | Info (SQL 文本) | SELECT.*large_table|DELETE.*log(正則) |
--match-user | User 列 | app_user|report_user |
--match-host | Host 列 | 192.168.1.%|10.0.0.5 |
--match-db | db 列 | order_db|log_db |
對應 --ignore-* 參數可反向排除。
pt-kill --match-command Sleep --idle-time 300 --victims all --interval 60 --kill --print --log /var/log/pt-kill.log --daemonize
pt-kill --match-command Query --busy-time 60 --victims all --interval 30 --kill-query --print --log /var/log/pt-kill.log --daemonize
pt-kill --match-user "report_user" --busy-time 30 --victims all --interval 10 --kill-query --print
pt-kill --match-state "Copying to tmp table|Sorting result" --busy-time 20 --victims all --interval 10 --kill-query
pt-kill --match-info "SELECT \* FROM big_table" --busy-time 10 --victims all --interval 5 --kill-query
將連接信息與常用參數寫入 /etc/pt-kill.conf:
host=127.0.0.1 port=3306 user=monitor password=xxx busy-time=60 interval=30 victims=all kill-query print log=/var/log/pt-kill.log daemonize
啟動:pt-kill --config /etc/pt-kill.conf
PROCESS、SUPER(或 CONNECTION_ADMIN 8.0+)--kill-querypt-kill 以「規則匹配 + 定時執行 + 多種動作」構建了靈活的連接治理體系。**善用配置文件固化策略,配合 --daemonize 常駐,讓異常連接無處遁形**,是 DBA 從「救火」走向「防火」的關鍵一步。