MYSQL優化之processlist
1、processlist
show processlist 是顯示使用者正在執行的執行緒,需要注意的是,除了 root 使用者能看到所有正在執行的執行緒外,其他使用者都只能看到自己正在執行的執行緒,看不到其它使用者正在執行的執行緒。
除非單獨個這個使用者賦予了PROCESS 許可權。
show processlist 顯示的資訊都是來自MySQL系統庫 information_schema 中的 processlist 表。所以使用下面的查詢語句可以獲得相同的結果:
select * from information_schema.processlist
1、1 欄位說明:
Id: 就是這個執行緒的唯一標識,當我們發現這個執行緒有問題的時候,可以通過 kill 命令,加上這個Id值將這個執行緒殺掉。前面我們說了show processlist 顯示的資訊時來自information_schema.processlist 表,所以這個Id就是這個表的主鍵。
User: 就是指啟動這個執行緒的使用者。
Host: 記錄了傳送請求的客戶端的 IP 和 埠號。通過這些資訊在排查問題的時候,我們可以定位到是哪個客戶端的哪個程序傳送的請求。
DB: 當前執行的命令是在哪一個資料庫上。如果沒有指定資料庫,則該值為 NULL 。
Command: 是指此刻該執行緒正在執行的命令。這個很複雜,下面單獨解釋
Time: 表示該執行緒處於當前狀態的時間。
State: 執行緒的狀態,和 Command 對應,下面單獨解釋。
Info: 一般記錄的是執行緒執行的語句。預設只顯示前100個字元,也就是你看到的語句可能是截斷了的,要看全部資訊,需要使用 show full processlist。
1、2 下面我們單獨看一下 Command 的值:
Binlog Dump: 主節點正在將二進位制日誌 ,同步到從節點
Change User: 正在執行一個 change-user 的操作
Close Stmt: 正在關閉一個Prepared Statement 物件
Connect: 一個從節點連上了主節點
Connect Out: 一個從節點正在連主節點
Create DB: 正在執行一個create-database 的操作
Daemon: 伺服器內部執行緒,而不是來自客戶端的連結
Debug: 執行緒正在生成除錯資訊
Delayed Insert: 該執行緒是一個延遲插入的處理程式
Drop DB: 正在執行一個 drop-database 的操作
Execute: 正在執行一個 Prepared Statement
Fetch: 正在從Prepared Statement 中獲取執行結果
Field List: 正在獲取表的列資訊
Init DB: 該執行緒正在選取一個預設的資料庫
Kill : 正在執行 kill 語句,殺死指定執行緒
Long Data: 正在從Prepared Statement 中檢索 long data
Ping: 正在處理 server-ping 的請求
Prepare: 該執行緒正在準備一個 Prepared Statement
ProcessList: 該執行緒正在生成伺服器執行緒相關資訊
Query: 該執行緒正在執行一個語句
Quit: 該執行緒正在退出
Refresh:該執行緒正在刷表,日誌或快取;或者在重置狀態變數,或者在複製伺服器資訊
Register Slave: 正在註冊從節點
Reset Stmt: 正在重置 prepared statement
Set Option: 正在設定或重置客戶端的 statement-execution 選項
Shutdown: 正在關閉伺服器
Sleep: 正在等待客戶端向它傳送執行語句
Statistics: 該執行緒正在生成 server-status 資訊
Table Dump: 正在傳送表的內容到從伺服器
Time: Unused