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

MySQL SHOW PROCESSLIST 實戰:快速定位阻塞與慢查詢

     編輯:MySQL 資料庫相關知識

兩種呼叫方式

# 方式 1:命令列(無需登入 mysql shell)
mysqladmin processlist

# 方式 2:SQL 介面(支援 WHERE 過濾)
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;  -- 顯示完整 SQL 文本

輸出欄位詳細解讀

欄位含義排查價值
Id連線執行緒 IDKILL <Id> 終止會話
UserMySQL 用戶名識別應用/帳號
Host客戶端 IP:Port追蹤來源機器
db當前預設資料庫定位業務庫
Command執行命令類型Sleep/Query/Connect/Binlog Dump...
Time當前狀態持續秒數長時間 = 疑似阻塞/慢查詢
StateSQL 執行內部狀態關鍵診斷欄位(見下表)
Info正在執行的 SQL 文本直接看到問題語句

常見 State 狀態含義速查

State含義典型原因
Sleep閒置等待新請求連線池未釋放、長連線
Locked等待表鎖MyISAM 表鎖、FLUSH TABLES、DDL
Sending data讀取並發送結果大結果集、無索引掃描
Copying to tmp table建立臨時表GROUP BY/ORDER BY/DISTINCT 無索引
Sorting result排序中ORDER BY 無索引、sort_buffer 不足
Waiting for table metadata lock等待 MDLDDL 與 DML 衝突、長事務
Updating執行 UPDATE/DELETE大批量寫入、鎖等待

實戰排查腳本

-- 1. 找出執行超過 10 秒的活躍查詢
SELECT * FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep' AND TIME > 10
ORDER BY TIME DESC;

-- 2. 統計各狀態連線數
SELECT STATE, COUNT(*) FROM information_schema.PROCESSLIST GROUP BY STATE;

-- 3. 結合 KILL 批量釋放(謹慎使用)
SELECT CONCAT('KILL ', ID, ';') FROM information_schema.PROCESSLIST
WHERE USER = 'app_user' AND COMMAND = 'Sleep' AND TIME > 600;

權限說明

  • PROCESS 權限:查看所有線程(含他人)
  • 無 PROCESS:僅見自己的線程
  • SUPER 權限:可 KILL 任意線程

進階替代方案

  • Performance Schema:events_statements_current 表提供更豐富的指標(鎖等待、IO、階段耗時)
  • sys schema:sys.session, sys.processlist 視圖封裝常用分析
  • pt-query-digest:分析慢查詢日誌,聚合 TOP SQL
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved