# Shell
mysqladmin processlist
# 客戶端
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST; -- 顯示完整 SQL
需 SUPER 權限才能看所有線程,否則僅見自身。
| 欄位 | 含義 | 排查價值 |
|---|---|---|
| Id | 線程唯一識別 | KILL id 終止 |
| User | MySQL 用戶 | 非 root 僅見自己 |
| Host | 客戶端 IP:Port | 追蹤來源應用 |
| db | 當前資料庫 | 確認操作庫 |
| Command | 指令類型:Sleep/Query/Connect/Binlog Dump 等 | Sleep 過多 → 連線池洩漏 |
| Time | 當前狀態持續秒數 | 長時間 → 慢查詢/鎖等待 |
| State | 執行階段狀態 | 核心診斷依據 |
| Info | SQL 文本 (FULL 顯示完整) | 直接定位問題語句 |
| State | 含義 | 對策 |
|---|---|---|
| Locked | 等待表鎖 (MyISAM) | 改 InnoDB、縮短交易、優化索引 |
| Sending data | 讀取/傳送資料列 | 大結果集、無索引、網路慢 |
| Copying to tmp table | 建立臨時表 | 優化 GROUP BY/ORDER BY、加索引 |
| Sorting result | 排序中 | filesort、加索引避免排序 |
| Waiting for table flush | FLUSH TABLES 等待 | 備份/鎖表操作衝突 |
| Freeing items | 查詢結束清理 | 正常,極短 |
SHOW FULL PROCESSLIST; 連續執行 3-5 次,記錄重複出現的高 Time 線程。Info SQL,複製執行 EXPLAIN 分析。Sleep,檢查應用連線池 wait_timeout、max_idle_time 設定。Locked 多,確認是否 MyISAM 表、長交易、備份鎖表。
5. KILL id 終止失控查詢,觀察是否恢復。
SELECT * FROM information_schema.PROCESSLIST
WHERE TIME > 60 AND COMMAND != 'Sleep'
ORDER BY TIME DESC;
可寫入監控腳本,自動告警長時間查詢。
Sleep 佔資源大 → 實際極小,重點在 Query 狀態。State 細節 → Sending data 與 Copying to tmp table 優化方向截然不同。熟練使用 SHOW PROCESSLIST,是 MySQL 運維排查的第一把手術刀。