首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL SHOW PROCESSLIST 線程監控實戰:欄位解讀與排查技巧

     編輯:MySQL 資料庫相關知識

兩種查看方式

# Shell
mysqladmin processlist

# 客戶端
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;  -- 顯示完整 SQL

需 SUPER 權限才能看所有線程,否則僅見自身。

輸出欄位完整解讀

欄位含義排查價值
Id線程唯一識別KILL id 終止
UserMySQL 用戶非 root 僅見自己
Host客戶端 IP:Port追蹤來源應用
db當前資料庫確認操作庫
Command指令類型:Sleep/Query/Connect/Binlog Dump 等Sleep 過多 → 連線池洩漏
Time當前狀態持續秒數長時間 → 慢查詢/鎖等待
State執行階段狀態核心診斷依據
InfoSQL 文本 (FULL 顯示完整)直接定位問題語句

關鍵 State 值對照

State含義對策
Locked等待表鎖 (MyISAM)改 InnoDB、縮短交易、優化索引
Sending data讀取/傳送資料列大結果集、無索引、網路慢
Copying to tmp table建立臨時表優化 GROUP BY/ORDER BY、加索引
Sorting result排序中filesort、加索引避免排序
Waiting for table flushFLUSH TABLES 等待備份/鎖表操作衝突
Freeing items查詢結束清理正常,極短

實戰排查流程

  1. SHOW FULL PROCESSLIST; 連續執行 3-5 次,記錄重複出現的高 Time 線程。
  2. 鎖定 Info SQL,複製執行 EXPLAIN 分析。
  3. 若大量 Sleep,檢查應用連線池 wait_timeout、max_idle_time 設定。
  4. 4. 若 Locked 多,確認是否 MyISAM 表、長交易、備份鎖表。 5. KILL id 終止失控查詢,觀察是否恢復。

進階:Information Schema 視圖

SELECT * FROM information_schema.PROCESSLIST
WHERE TIME > 60 AND COMMAND != 'Sleep'
ORDER BY TIME DESC;

可寫入監控腳本,自動告警長時間查詢。

常見誤區

  • 以為 Sleep 佔資源大 → 實際極小,重點在 Query 狀態。
  • 直接 KILL 而不分析 SQL → 會重複發生,需根治索引/邏輯。
  • 忽略 State 細節 → Sending data 與 Copying to tmp table 優化方向截然不同。

熟練使用 SHOW PROCESSLIST,是 MySQL 運維排查的第一把手術刀。

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