Mysql語法系列—show full processlist介紹

語法介紹:

用於查看當前數據庫有哪些線程正在運行,可以看到一共有多少個連接數,哪些是正在查詢,哪些是休眠狀態。在遇到mysql出現性能問題,慢sql等問題時,可以及時的查詢到問題sql,以及關閉線程。
如果有root權限,則可以查看所有主題。否則,只能看到自己的線程(即正在使用的MySQL帳戶關聯的線程)

語法:

show full processlist;
或
show processlist;

區別:
如果不使用FULL關鍵字,則只在Info字段中顯示每個語句的前100個字符

執行結果:
在這裏插入圖片描述
返回結果解釋:

Id 線程id,標識符,當線程卡死或者嚴重影響系統性能時,可以kill Id
User 當前用戶名
Host 當前線程語句發出的客戶端Ip地址和端口號,用來追蹤是那臺服務器執行的語句
db 當前線程連接的數據庫名稱
Command 顯示當前線程執行的命令,休眠(sleep)、查詢(query)、連接(connect)爲主要的命令的類型
Time 顯示線程當前狀態的執行時間,單位是秒
State 顯示當前線程中sql語句的執行狀態,詳細信息下面列出
Info 顯示當前線程執行的sql語句

返回結果中State列值解釋:

After create 當線程在創建表的函數末尾創建表(包括內部臨時表)時,會發生這種情況。即使由於某些錯誤而無法創建表,也會使用此狀態
Analyzing 線程正在計算MyISAM表鍵分佈
checking permissions 線程正在檢查服務器是否具有執行語句所需的權限
Checking table 該線程正在執行表檢查操作
cleaning up 該線程已經處理了一個命令,並準備釋放內存並重置某些狀態變量
closing tables 該線程正在將更改的表數據刷新到磁盤並關閉已使用的表,這應該是一個快速的操作。如果沒有,請驗證您沒有完整磁盤並且磁盤使用不是很大
converting HEAP to ondisk 該線程正在將內部臨時表從 MEMORY錶轉換爲磁盤表
copy to tmp table 線程正在處理一個ALTER TABLE語句。在創建具有新結構的表但在將行復制到其中之前,將發生此狀態。對於處於此狀態的線程,可以使用性能模式來獲取有關複製操作的進度
Copying to group table 如果語句具有不同的條件ORDER BY和 GROUP BY標準,則按組對行進行排序並將其複製到臨時表
Copying to tmp table 服務器正在複製到內存中的臨時表
altering table 服務器正在執行ALTER TABLE
Copying to tmp table on disk 服務器正在複製到磁盤上的臨時表,臨時結果集變得太大, 因此,線程正在將臨時表從內存更改爲基於磁盤的格式以節省內存
Creating index 線程正在處理ALTER TABLE … ENABLE KEYS一個MyISAM表
Creating sort index 線程正在處理SELECT使用內部臨時表解析的線程
creating table 線程正在創建一個表,這包括創建臨時表
Creating tmp table 該線程正在內存或磁盤上創建臨時表,如果表在內存中創建但稍後轉換爲磁盤表,則該操作期間的狀態將爲Copying to tmp table on disk
committing alter table to storage engine 服務器已完成 ALTER TABLE並提交結果
deleting from main table 服務器正在執行多表刪除的第一部分,它僅從第一個表中刪除,並保存用於從其他(引用)表中刪除的列和偏移量
deleting from reference tables 服務器正在執行多表刪除的第二部分,並從其他表中刪除匹配的行
discard_or_import_tablespace 線程正在處理ALTER TABLE … DISCARD TABLESPACE或ALTER TABLE … IMPORT TABLESPACE
end 這發生在結束,但是在清理之前 ALTER TABLE, CREATE VIEW, DELETE, INSERT, SELECT,或 UPDATE語句
executing 該線程已開始執行語句
Execution of init_command 線程正在執行init_command系統變量值中的語句
freeing items 線程執行了一個命令,在此狀態期間完成的一些項目的釋放涉及查詢緩存,這種狀態通常緊隨其後cleaning up
FULLTEXT initialization 服務器正準備執行自然語言全文搜索
init 出現這種情況的初始化之前 ALTER TABLE, DELETE, INSERT, SELECT,或 UPDATE語句。服務器在此狀態下采取的操作包括刷新二進制日誌,InnoDB日誌和一些查詢緩存清理操作 對於end中,可能會發生以下操作:1.刪除表中的數據後刪除查詢緩存條目2.將事件寫入二進制日誌3.釋放內存緩衝區,包括blob
Killed 有人KILL 向線程發送了一個語句,它應該在下次檢查kill標誌時中止。在MySQL的每個主循環中檢查該標誌,但在某些情況下,線程可能仍然需要很短的時間才能死掉。如果線程被某個其他線程鎖定,則一旦另一個線程釋放其鎖定,kill就會生效
logging slow query 該線程正在向慢查詢日誌寫一條語句
login 連接線程的初始狀態,直到客戶端成功通過身份驗證
manage keys 服務器正在啓用或禁用表索引
NULL 該狀態用於SHOW PROCESSLIST時的狀態
Opening tables 線程正在嘗試打開一個表。這應該是非常快的程序,除非有什麼東西阻止打開。例如,一個ALTER TABLE或一個 LOCK TABLE語句可以阻止在語句結束之前打開表。還值得檢查您的table_open_cache價值是否足夠大
optimizing 服務器正在對查詢執行初始優化
preparing 在查詢優化期間發生此狀態
Purging old relay logs 該線程正在刪除不需要的中繼日誌文件
query end 處理查詢後但在freeing items狀態之前發生此狀態
Receiving from client 服務器正在從客戶端讀取數據包,Reading from net在MySQL 5.7.8之前調用此狀態
Removing duplicates 該查詢使用 SELECT DISTINCT的方式是MySQL無法在早期階段優化掉不同的操作。因此,在將結果發送到客戶端之前,MySQL需要額外的階段來刪除所有重複的行
removing tmp table 該線程在處理SELECT 語句後刪除內部臨時表。如果未創建臨時表,則不使用此狀態
rename 該線程正在重命名一個表
rename result table 線程正在處理一個ALTER TABLE語句,創建了新表,並重命名它以替換原始表
Reopen tables 該線程獲得了表的鎖定,但在獲取鎖定之後注意到基礎表結構發生了變化。它釋放了鎖,關閉了桌子,並試圖重新打開它
Repair by sorting 修復代碼使用排序來創建索引
preparing for alter table 服務器正準備執行就地 ALTER TABLE
Repair done 該線程已完成對MyISAM表的多線程修復
Repair with keycache 修復代碼通過密鑰緩存逐個創建密鑰,這比慢得多Repair by sorting
Rolling back 該線程正在回滾一個事務
Saving state 對於MyISAM諸如修復或分析的表操作,線程將新表狀態保存到.MYI文件頭。狀態包括諸如行數, AUTO_INCREMENT計數器和密鑰分發之類的信息
Searching rows for update 該線程正在進行第一階段以在更新之前查找所有匹配的行。如果 UPDATE要更改用於查找所涉及行的索引,則必須執行此操作
Sending data 線程正在讀取和處理SELECT語句的行 ,並將數據發送到客戶端。由於在此狀態期間發生的操作往往會執行大量磁盤訪問(讀取),因此它通常是給定查詢生命週期中運行時間最長的狀態
Sending to client 服務器正在向客戶端寫入數據包,Writing to net在MySQL 5.7.8之前調用此狀態
setup 線程正在開始一個ALTER TABLE操作
Sorting for group 線程正在進行排序以滿足GROUP BY
Sorting for order 線程正在進行排序以滿足ORDER BY
Sorting index 該線程正在對索引頁面進行排序,以便在MyISAM表優化操作期間進行更有效的訪
Sorting result 對於SELECT聲明,這類似於Creating sort index非臨時表
statistics 服務器正在計算統計信息以開發查詢執行計劃,如果線程長時間處於此狀態,則服務器可能是磁盤綁定執行其他工作
System lock 該線程已調用mysql_lock_tables() ,並且線程狀態尚未更新。這是一個非常普遍的狀態,可能由於多種原因而發生。例如,線程將請求或正在等待表的內部或外部系統鎖定。InnoDB在執行期間等待表級鎖定時會 發生這種情況LOCK TABLES
update 線程正準備開始更新表
Updating 線程正在搜索要更新的行並正在更新它們
updating main table 服務器正在執行多表更新的第一部分,它僅更新第一個表,並保存用於更新其他(引用)表的列和偏移量
updating reference tables 服務器正在執行多表更新的第二部分,並更新其他表中的匹配行
User lock 該線程將要求或正在等待通過GET_LOCK()呼叫請求的諮詢鎖,對於 SHOW PROFILE,此狀態表示線程正在請求鎖定(不等待它)
User sleep 線程已經調用了一個 SLEEP()調用
Waiting for commit lock FLUSH TABLES WITH READ LOCK 正在等待提交鎖定
Waiting for global read lock FLUSH TABLES WITH READ LOCK 正在等待全局讀鎖定或read_only正在設置全局 系統變量
Waiting for tables 線程得到一個通知,表明表的底層結構已經改變,它需要重新打開表以獲得新結構。但是,要重新打開表,它必須等到所有其他線程關閉了相關表
Waiting for table flush 線程正在執行FLUSH TABLES並且正在等待所有線程關閉它們的表,或者線程得到一個表的基礎結構已經更改的通知,並且它需要重新打開表以獲取新結構。但是,要重新打開表,它必須等到所有其他線程關閉了相關表
Waiting for lock_type lock 服務器正在等待THR_LOCK從元數據鎖定子系統獲取 鎖定或鎖定,其中 lock_type指示鎖定的類型,此狀態表示等待 THR_LOCK:Waiting for table level lock 這些狀態表示等待元數據鎖定:1.Waiting for event metadata lock 2.Waiting for global read lock 3.Waiting for schema metadata lock 4.Waiting for stored function metadata lock 5.Waiting for stored procedure metadata lock 6.Waiting for table metadata lock 7.Waiting for trigger metadata lock
Waiting on cond 線程正在等待條件變爲真的通用狀態
Writing to net 服務器正在將數據包寫入網絡,Sending to client從MySQL 5.7.8開始調用此狀態
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章