pt-kill 進階用法:依規則精準殺掉問題連線的常見場景與指令範本
核心參數速查
--busy-time:查詢執行時間閾值
--idle-time:閒置時間閾值
--victims all:殺掉所有匹配連線 (預設 oldest 僅殺最久)
--interval:檢查間隔,預設 30s,建議調為 1-5s
--print:列印被殺連線資訊
--match-command:匹配 Command (Query、Sleep、Binlog Dump...)
--match-state:匹配 State (Locked、Sending data、Copying to tmp table...)
--match-info:正則匹配 SQL 文本
--match-db/user/host:匹配資料庫/用戶/來源主機
常用場景指令範本
1. 殺掉閒置超過 5 秒的 Sleep 連線
pt-kill --match-command Sleep --idle-time 5 \
--host=HOST --port=PORT --interval=1 --print --kill --victims all
2. 殺掉執行超過 5 秒的活躍查詢
pt-kill --match-command Query --busy-time 5 \
--host=HOST --port=PORT --interval=1 --print --kill --victims all
3. 殺掉匹配特定 SQL 模式且執行超時的查詢
pt-kill --match-command Query --busy-time 5 \
--match-info "DELETE|UPDATE" \
--host=HOST --port=PORT --interval=1 --print --kill --victims all
4. 殺掉正在 Filesort 的查詢
pt-kill --match-command Query --match-state "Sorting result" --busy-time 5 \
--host=HOST --port=PORT --interval=1 --print --kill --victims all
5. 殺掉正在建立臨時表的查詢
pt-kill --match-command Query --match-state "Copying to tmp table" --busy-time 5 \
--host=HOST --port=PORT --interval=1 --print --kill --victims all
實務建議
- 生產環境先用
--print 觀察一段時間,確認匹配精準後再加 --kill
--victims all 較激進,核心業務庫建議用 oldest 或配合 --match-user 限定非核心帳號
- 搭配
--log-dsn 記錄所有殺查動作,便於事後審計
- 若需監控多實例,建議寫 systemd service 或 supervisord 管理多個 pt-kill 進程