SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST顯示哪些線程正在運行。您也可以使用mysqladmin processlist語句得到此信息。如果您有SUPER權限,您可以看到所有線程。否則,您只能看到您自己的線程(也就是,與您正在使用的MySQL賬戶相關的線程)。請參見13.5.5.3節,“KILL語法”。如果您不使用FULL關鍵詞,則只顯示每個查詢的前100個字符。
本語句報告TCP/IP連接的主機名稱(采用host_name:client_port格式),以方便地判定哪個客戶端正在做什么。
如果您得到“too many connections”錯誤信息,并且想要了解正在發生的情況,本語句是非常有用的。MySQL保留一個額外的連接,讓擁有SUPER權限的 賬戶使用,以確保管理員能夠隨時連接和檢查系統(假設您沒有把此權限給予所有的用戶)。
在來自SHOW PROCESSLIST的輸出中常見的一些狀態:
· Checking table
線程正在執行(自動)表格檢查。
· Closing tables
意味著線程正在刷新更改后的表數據,并正在關閉使用過的表。這應該是一個快速的操作。如果不快,則您應該驗證您的磁盤沒有充滿,并且磁盤沒有被超負荷使用。
· Connect Out
連接到主服務器上的從屬服務器。
· Copying to tmp table on disk
臨時結果集合大于tmp_table_size。線程把臨時表從存儲器內部格式改變為磁盤模式,以節約存儲器。
· Creating tmp table
線程正在創建一個臨時表,以保持部分結果。
· deleting from main table
服務器正在執行多表刪除的第一部分,只從第一個表中刪除。
· deleting from reference tables
服務器正在執行多表刪除的第二部分,從其它表中刪除匹配的行。
· Flushing tables
線程正在執行FLUSH TABLES,并正在等待所有線程,以關閉表。
· FULLTEXT initialization
服務器正在準備執行一個自然語言全文本搜索。
· Killed
有人已經向線程發送了一個KILL命令。在下一次檢查終止標記時,應放棄。該標記在MySQL的每個大循環中都檢查,但是在有些情況下,線程終止只需要較短的時間。如果該線程被其它線程鎖定,則只要其它線程接觸鎖定,終止操作就會生效。
· Locked
該查詢被其它查詢鎖定。
· Sending data
線程正在為SELECT語句處理行,同時正在向客戶端發送數據。
· Sorting for group
線程正在進行分類,以滿足GROUP BY要求。
· Sorting for order
線程正在進行分類,以滿足ORDER BY要求。
· Opening tables
線程正在試圖打開一個表。這應該是非常快的過程,除非打開操作受到阻止。例如,一個ALTER TABLE或一個LOCK TABLE語句可以阻止打開一個表,直到語句完成為止。
· Removing duplicates
查詢正在使用SELECT DISTINCT。使用時,在早期階段,MySQL不能優化不同的操作。因此,MySQL要求一個額外的階段,以便在把結果發送給客戶端之前取消所有的復制行。
· Reopen table
線程得到一個表鎖定,但是在得到鎖定后被通知帶下方的表結構已更改了。它已經釋放了鎖定,關閉了表,并試圖重新打開它。
· Repair by sorting
修復代碼正在使用一個分類來創建索引。
· Repair with keycache
修復代碼正在通過關鍵緩存一個接一個地使用創建關鍵字。這比通過分類修復要慢很多。
· Searching rows for update
線程正在進行第一階段,以在更新之前,查找所有匹配的行。如果UPDATE正在更改用于查找相關行的索引,則必須這么做。
· Sleeping
線程正在等待客戶端,以向它發送一個新語句。
· System lock
線程正在等待得到一個用于表的外部系統鎖定。如果您沒有正在使用多個正在訪問同一個表的mysqld服務器,則您可以使用--skip-external-locking選項禁用系統鎖定。
· Upgrading lock
INSERT DELAYED管理程序正在試圖得到一個表鎖定,以插入行。
· Updating
線程正在搜索行,并正在更新這些行。
· User Lock
線程正在等待GET_LOCK()。
· Waiting for tables
線程得到一個通知,表的底層結構已經改變,需要重新打開表以得到新的結構。但是,為了能重新打開表,必須等待,直到所有其它的線程已經關閉了正在被質詢的表。
如果其它線程已經對正在被質詢的表使用了FLUSH TABLES或以下語句之一:FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE或OPTIMIZE TABLE;則會出現通知。
· waiting for handler insert
INSERT DELAYED管理程序已經處理了所有處于等待狀態的插入,并正在等待新插入。
多數狀態對應于非常快的操作。如果一個線程在這些狀態下停留了數秒,則可能是有問題,需要進行調查。
有一些其它的狀態,在前面的清單中沒有提及,但是其中有很多狀態對于查找服務器中的程序錯誤是有用的。