首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 批量 Kill 長時間運行查詢:四種實用方法與工具推薦

     編輯:MySQL 綜合教學

KILL 語法速查

KILL [CONNECTION | QUERY] thread_id
-- CONNECTION (默認):斷開連接
-- QUERY:僅終止當前語句,保持連接

權限:PROCESS 可看所有線程,SUPER 可 Kill 所有線程。

方法一:information_schema + 臨時文件(純 SQL)

-- 1. 生成 Kill 語句
SELECT CONCAT('KILL ', id, ';')
FROM information_schema.PROCESSLIST
WHERE USER = 'root' AND TIME > 60  -- 條件自定
INTO OUTFILE '/tmp/kill.sql';

-- 2. 執行
SOURCE /tmp/kill.sql;

優點:無外部依賴,可放入定時事件自動清理。

方法二:mysqladmin 管道命令(Shell 一鍵)

# Kill 所有連接
mysqladmin -uroot -p processlist | awk -F'|' '{print $2}' | xargs -n1 mysqladmin -uroot -p kill

# Kill 指定用戶 (如 mike)
mysqladmin -uroot -p processlist | awk -F'|' '$3=="Mike"{print $2}' | xargs -n1 mysqladmin -uroot -p kill

優點:適合腳本調用,無需登入 MySQL。

方法三:Shell 腳本針對鎖定狀態

#!/bin/bash
for id in $(mysqladmin processlist | grep -i locked | awk '{print $1}'); do
  mysqladmin kill ${id}
done

方法四:Maatkit / Percona Toolkit pt-kill(生產首選)

# 安裝
yum install percona-toolkit  # 或下載二進制

# 僅打印超過 60 秒的查詢
pt-kill --busy-time 60 --print

# 打印並 Kill
pt-kill --busy-time 60 --print --kill

# 更多條件
pt-kill --match-command Query --match-user app_user --victims all --interval 10 --run-time 3600 --daemonize

核心參數:

  • --busy-time N:運行超過 N 秒
  • --match-command / --match-user / --match-db / --match-host:過濾維度
  • --victims all/oldest/youngest:選擇殺誰
  • --daemonize:後台守護進程模式持續清理

對比與選型建議

方法適用場景優點缺點
SQL + OUTFILE臨時手動清理、定時事件純 SQL,無工具依賴需文件權限,無守護模式
mysqladmin 管道運維腳本、CI/CD 任務Shell 原生,易集成解析輸出格式易受版本影響
Shell 腳本特定狀態(如 locked)清理邏輯可控需維護腳本
pt-kill**生產環境常態化治理**功能最全、守護進程、條件豐富、官方維護需額外安裝

最佳實踐

  1. **常態化部署 pt-kill 守護進程**:--busy-time 300 --kill --daemonize --log /var/log/pt-kill.log
  2. 結合 **慢查詢日誌分析**(pt-query-digest)定位高頻慢 SQL,從源頭優化
  3. 設置 **資源組/配額**(MySQL 8.0 Resource Groups)限制單用戶佔用
  4. 應用層設置 **查詢超時**(如 JDBC setQueryTimeout、PDO ATTR_TIMEOUT)雙重保障

Kill 是止痛藥,優化才是治本方。建立「監控 → Kill 止血 → 分析 → 優化 → 驗證」閉環,才能從根上消除長查詢隱患。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved