MySQL調優使用者監控之show processlist

PHPer技術棧發表於2021-11-09

show processlist顯示這臺MySQL正在連線的使用者:

mysql> show processlist;
+----+------+-----------+-------+---------+------+----------+------------------+
| Id | User | Host      | db    | Command | Time | State    | Info             |
+----+------+-----------+-------+---------+------+----------+------------------+
| 25 | root | localhost | mysql | Query   |    0 | starting | show processlist |
| 26 | root | localhost | NULL  | Sleep   |   29 |          | NULL             |
+----+------+-----------+-------+---------+------+----------+------------------+
2 rows in set (0.00 sec)

root使用者能看到所有正在執行的執行緒,其他使用者則需要被賦予了PROCESS 許可權,否則只能看到自己正在執行的執行緒。show processlist 顯示的資訊來自MySQL系統庫 information_schema 中的 processlist 表。可以使用下面的查詢語句可以獲得相同的結果(為了便於閱讀避免錯行直接截圖):

ID

執行緒的唯一標識,是information_schema.processlist表的主鍵。

USER

就是指啟動這個執行緒的使用者。

Host

記錄傳送請求的客戶端的 IP 和 埠號。通過這些資訊在排查問題的時候,我們可以定位到是哪個客戶端的哪個程式傳送的請求。

DB

當前執行的命令是在使用哪一個資料庫上。如果沒有指定資料庫,則該值為 NULL 。

Command

是指此刻該執行緒正在執行的命令,下面單獨解釋。

Time

表示該執行緒處於當前狀態的時間。

State

執行緒的狀態,和 Command 對應,下面單獨解釋。

Info

記錄的是執行緒執行的語句。預設只顯示前100個字元,也就是看到的語句可能是截斷的,要看全部資訊使用 show full processlist。

這兒只列出常用且重要的部分,詳細請參考MySQL官方連結:8.14.2 Thread Command Values

sleep:執行緒正在等待客戶端傳送新的請求

query:執行緒正在執行查詢或正在將結果傳送給客戶端

locked:在mysql的服務層,該執行緒正在等待表鎖

analyzing and statistics:執行緒正在收集儲存引擎的統計資訊,並生成查詢的執行計劃

Copying to tmp table:執行緒正在執行查詢,並且將其結果集都複製到一個臨時表中

sorting result:執行緒正在對結果集進行排序

sending data:執行緒可能在多個狀態之間傳送資料,或者在生成結果集或者向客戶端返回資料

這兒只列出常用且重要的部分,詳細請參考MySQL官方連結:8.14.3 General Thread States

User lock

該執行緒將要請求或正在等待通過GET_LOCK()呼叫請求的諮詢鎖定 。對於 SHOW PROFILE,此狀態表示執行緒正在請求鎖定(不等待它)。

User sleep

執行緒已呼叫 SLEEP()

init

出現這種情況的初始化之前 ALTER TABLEDELETEINSERTSELECT,或 UPDATE語句。伺服器在此狀態下采取的操作包括重新整理二進位制日誌,InnoDB日誌和一些查詢快取清除操作。

end

這發生在結束,但的清理之前 ALTER TABLECREATE VIEWDELETEINSERTSELECT,或 UPDATE語句。

對於end狀態,可能發生以下操作:

  • 更改表中的資料後刪除查詢快取條目
  • 將事件寫入二進位制日誌
  • 釋放記憶體緩衝區,包括blob

After create

當執行緒在建立表的函式的末尾建立表(包括內部臨時表)時,會發生這種情況。即使由於某些錯誤而無法建立表,也會使用此狀態。

altering table

伺服器正在執行就地服務 ALTER TABLE

Checking table

執行緒正在執行表檢查操作。

closing tables

執行緒正在將已更改的表資料重新整理到磁碟並關閉已使用的表。這應該是一個快速的操作。如果沒有,請確認您沒有完整的磁碟,並且磁碟使用率不是很高。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
PHPer技術棧

相關文章