SHOW PROCESSLIST (或 SHOW FULL PROCESSLIST) 是排查 MySQL 併發阻塞、慢查詢、連線洩漏的第一現場工具。本文完整解讀各欄位含義、列出所有 State 狀態值中文說明,並附贈常用 SHOW 指令速查。
| 欄位 | 說明 | 排查價值 |
|---|---|---|
| Id | 連線執行緒 ID,KILL id 終止專用 | ⭐⭐⭐⭐⭐ 精準斬殺問題連線 |
| User | 登入用戶,非 root 僅見自己權限內進程 | ⭐⭐⭐ 定責應用/用戶 |
| Host | 來源 IP:Port,追蹤問題客戶端 | ⭐⭐⭐⭐ 定位來源應用伺服器 |
| db | 當前預設資料庫 | ⭐⭐ 確認操作目標庫 |
| Command | 執行命令類型:Sleep/Query/Connect/Binlog Dump 等 | ⭐⭐⭐⭐ 判斷閒置/執行中/備份中 |
| Time | 當前狀態持續秒數 | ⭐⭐⭐⭐⭐ > 秒級需關注,分級告警 |
| State | SQL 執行內部狀態(核心診斷欄位) | ⭐⭐⭐⭐⭐ 見下方完整狀態表 |
| Info | 正在執行的 SQL 片段(截斷),SHOW FULL PROCESSLIST 完整 | ⭐⭐⭐⭐⭐ 直接見問題 SQL |
| State 值 | 中文含義 | 典型場景/對策 |
|---|---|---|
| Checking table | 檢查資料表 | 自動檢查,通常極快 |
| Closing tables | 關閉表,刷新磁碟 | 若久掛:檢查磁碟空間/IO 負載 |
| Connect Out | 從庫連主庫 | 復制連線建立中 |
| Copying to tmp table on disk | 臨時表超大寫磁碟 | 調大 tmp_table_size/max_heap_table_size、優化 SQL 避免磁碟臨時表 |
| Creating tmp table | 建立內存臨時表 | GROUP BY/DISTINCT/ORDER BY 觸發 |
| deleting from main table | 多表刪除第一階段 | 主表刪除中 |
| deleting from reference tables | 多表刪除第二階段 | 關聯表刪除中 |
| Flushing tables | 執行 FLUSH TABLES | 等待其他線程關閉表 |
| Killed | 收到 KILL 信號 | 等待鎖釋放後終止 |
| Locked | 被其他查詢鎖住 | ⚠️ 關鍵:找持鎖者 (Info 欄),優化/殺掉持鎖查詢 |
| Sending data | 處理記錄並發送客戶端 | 正常查詢狀態,久掛 = 結果集大/網路慢/無索引 |
| Sorting for group | GROUP BY 排序 | 優化索引滿足排序 |
| Sorting for order | ORDER BY 排序 | 同上 |
| Opening tables | 嘗試打開表 | 若久掛:DDL/LOCK TABLE 阻塞 |
| Removing duplicates | SELECT DISTINCT 去重 | 優化器未提前去重 |
| Reopen table | 結構變更後重開 | DDL 後自動觸發 |
| Repair by sorting | 修復表排序建索引 | REPAIR TABLE 執行中 |
| Repair with keycache | 修復表用鍵緩存 | 較慢,大表修復 |
| Searching rows for update | 尋找待更新行 | UPDATE 前置掃描 |
| Sleeping | 等待客戶端新請求 | 連線池閒置連線,Time 大 = 洩漏/池配置問題 |
| System lock | 等待外部系統鎖 | 加 --skip-external-locking 禁用 |
| Upgrading lock | INSERT DELAYED 升級鎖 | 舊功能,少見 |
| Updating | 搜尋匹配並修改 | UPDATE 執行中 |
| User Lock | 等待 GET_LOCK() | 應用層邏輯鎖 |
| Waiting for tables | 表結構變更需重開 | FLUSH/ALTER/RENAME/REPAIR/ANALYZE/OPTIMIZE 觸發 |
| waiting for handler insert | INSERT DELAYED 等待 | 舊功能 |
Locked、Copying to tmp table on disk、Sending data (久) 為三大紅旗EXPLAIN 分析 → 索引/改寫Sleep 佔比高 = 連線池過大/洩漏
SHOW PROCESSLIST; -- 當前執行緒
SHOW FULL PROCESSLIST; -- 完整 SQL
SHOW TABLES; -- 所有表
SHOW DATABASES; -- 所有庫
SHOW TABLE STATUS; -- 表詳細資訊
SHOW COLUMNS FROM tbl; -- 表結構 (同 DESC)
SHOW INDEX FROM tbl; -- 索引詳情
SHOW CREATE TABLE tbl; -- 建表語句
SHOW CREATE DATABASE db; -- 建庫語句
SHOW VARIABLES LIKE 'xxx'; -- 系統變數
SHOW STATUS LIKE 'xxx'; -- 狀態計數器
SHOW ENGINES; -- 可用引擎
SHOW WARNINGS; -- 最近警告
SHOW ERRORS; -- 最近錯誤
SHOW GRANTS FOR user@host; -- 用戶權限
熟練讀懂 SHOW PROCESSLIST,是 DBA 與後端工程師從「感覺慢」進化到「定位準、解決快」的必修課。