以下清單描述與一般查詢處理相關聯,而非與複寫等更專業活動相關聯的執行緒 State
值。其中許多值僅適用於尋找伺服器中的錯誤。
當執行緒建立資料表 (包括內部暫存資料表) 時,會在建立資料表的函式結尾發生。即使資料表由於某些錯誤而無法建立,也會使用此狀態。
伺服器正在執行就地
ALTER TABLE
。執行緒正在計算
MyISAM
資料表索引鍵分佈 (例如,用於ANALYZE TABLE
)。執行緒正在檢查伺服器是否具有執行語句所需的權限。
執行緒正在執行資料表檢查操作。
執行緒已處理一個命令,並準備釋放記憶體和重設某些狀態變數。
執行緒正在將變更的資料表資料刷新到磁碟並關閉使用的資料表。這應該是快速的操作。如果不是,請驗證您是否沒有磁碟已滿以及磁碟是否沒有大量使用。
committing alter table to storage engine
伺服器已完成就地
ALTER TABLE
,並且正在提交結果。執行緒正在將內部暫存資料表從
MEMORY
資料表轉換為磁碟上的資料表。執行緒正在處理
ALTER TABLE
語句。此狀態發生在建立具有新結構的資料表之後,但在將列複製到其中之前。對於處於此狀態的執行緒,可以使用效能架構取得關於複製操作進度的資訊。請參閱第 29.12.5 節,「效能架構階段事件資料表」。
如果語句具有不同的
ORDER BY
和GROUP BY
條件,則會依群組排序列,並複製到暫存資料表。伺服器正在複製到記憶體中的暫存表格。
伺服器正在複製到磁碟上的暫存表格。暫存結果集已變得太大(請參閱第 10.4.4 節,「MySQL 中內部暫存表格的使用」)。因此,執行緒正在將暫存表格從記憶體中格式變更為基於磁碟的格式,以節省記憶體。
執行緒正在處理
MyISAM
表格的ALTER TABLE ... ENABLE KEYS
。執行緒正在處理使用內部暫存表格解析的
SELECT
。執行緒正在建立表格。這包括建立暫存表格。
執行緒正在記憶體中或磁碟上建立暫存表格。如果表格建立在記憶體中,但稍後轉換為磁碟上的表格,則該操作期間的狀態為
複製到磁碟上的 tmp 表格
。伺服器正在執行多表格刪除的第一部分。它僅從第一個表格中刪除,並儲存將用於從其他(參考)表格刪除的欄和偏移量。
伺服器正在執行多表格刪除的第二部分,並從其他表格中刪除相符的列。
執行緒正在處理
ALTER TABLE ... DISCARD TABLESPACE
或ALTER TABLE ... IMPORT TABLESPACE
陳述式。這發生在
ALTER TABLE
、CREATE VIEW
、DELETE
、INSERT
、SELECT
或UPDATE
陳述式的結尾,但在清除之前。對於
結束
狀態,可能會發生以下操作將事件寫入二進位記錄檔
釋放記憶體緩衝區,包括 blobs 的緩衝區
執行緒已開始執行陳述式。
執行緒正在執行
init_command
系統變數值中的陳述式。執行緒已執行命令。此狀態通常接著
清除中
。伺服器正在準備執行自然語言全文檢索。
這發生在初始化
ALTER TABLE
、DELETE
、INSERT
、SELECT
或UPDATE
陳述式之前。伺服器在此狀態下採取的動作包括刷新二進位記錄檔和InnoDB
記錄檔。有人已將
KILL
陳述式傳送到執行緒,而且它應該在下次檢查終止旗標時中止。該旗標會在 MySQL 的每個主要迴圈中檢查,但在某些情況下,執行緒可能仍需要一小段時間才會終止。如果執行緒被其他執行緒鎖定,則終止會在其他執行緒釋放其鎖定後立即生效。執行緒正在嘗試鎖定系統表格(例如,時區或記錄表格)。
執行緒正在將陳述式寫入慢查詢記錄檔。
連線執行緒的初始狀態,直到用戶端已成功驗證為止。
伺服器正在啟用或停用表格索引。
執行緒正在嘗試開啟系統表格(例如,時區或記錄表格)。
執行緒正在嘗試開啟表格。除非有任何情況阻止開啟,否則這應該是非常快速的程序。例如,
ALTER TABLE
或LOCK TABLE
陳述式可能會阻止開啟表格,直到陳述式完成為止。也值得檢查您的table_open_cache
值是否足夠大。對於系統表格,會改用
開啟系統表格
狀態。伺服器正在執行查詢的初始最佳化。
此狀態會在查詢最佳化期間發生。
伺服器正在準備執行就地
ALTER TABLE
。執行緒正在移除不需要的中繼記錄檔。
此狀態會在處理查詢之後,但在
釋放項目
狀態之前發生。伺服器正在從用戶端讀取封包。
查詢是以 MySQL 無法在早期最佳化移除 distinct 運算的方式使用
SELECT DISTINCT
。因此,MySQL 需要額外的階段才能在將結果傳送給用戶端之前移除所有重複的列。執行緒正在處理
SELECT
陳述式後移除內部暫存表格。如果未建立暫存表格,則不使用此狀態。執行緒正在重新命名表格。
執行緒正在處理
ALTER TABLE
陳述式,已建立新表格,並正在重新命名它以取代原始表格。執行緒已取得表格的鎖定,但在取得鎖定後注意到基礎表格結構已變更。它已釋放鎖定、關閉表格,並正在嘗試重新開啟它。
修復程式碼正在使用排序來建立索引。
執行緒已完成
MyISAM
表格的多執行緒修復。修復程式碼正在透過索引鍵快取,一次建立一個索引鍵。這比
依排序修復
慢得多。執行緒正在回滾交易。
對於
MyISAM
表格操作(例如修復或分析),執行緒正在將新表格狀態儲存到.MYI
檔案標頭。狀態包括列數、AUTO_INCREMENT
計數器和索引鍵分佈等資訊。執行緒正在執行第一階段,以在更新所有相符的列之前找到它們。如果
UPDATE
正在變更用於尋找相關列的索引,則必須執行此動作。傳送資料
此狀態現在包含在
執行中
狀態中。伺服器正在將封包寫入用戶端。
執行緒正在開始
ALTER TABLE
操作。執行緒正在執行排序,以滿足
GROUP BY
子句。執行緒正在執行排序,以滿足
ORDER BY
子句。執行緒正在排序索引頁面,以便在
MyISAM
表格最佳化操作期間更有效率地存取。對於
SELECT
語法,這與建立排序索引
類似,但用於非暫存表格。語法執行開始時的第一個階段。
伺服器正在計算統計資料,以制定查詢執行計畫。如果執行緒處於此狀態的時間很長,則伺服器可能正受限於磁碟執行其他工作。
執行緒已呼叫
mysql_lock_tables()
,且執行緒狀態自此之後未更新。這是一個非常常見的狀態,可能因多種原因而發生。例如,執行緒將要請求或正在等待表格的內部或外部系統鎖定。當
InnoDB
在執行LOCK TABLES
期間等待表格層級鎖定時,可能會發生這種情況。如果此狀態是由於請求外部鎖定所造成,且您未使用多個存取相同MyISAM
表格的 mysqld 伺服器,則您可以使用--skip-external-locking
選項停用外部系統鎖定。但是,預設情況下會停用外部鎖定,因此此選項可能不會產生任何作用。對於SHOW PROFILE
,此狀態表示執行緒正在請求鎖定(而非等待鎖定)。對於系統表格,則會改用
鎖定系統表格
狀態。執行緒準備開始更新表格。
執行緒正在搜尋要更新的列,並正在更新它們。
伺服器正在執行多表格更新的第一部分。它只更新第一個表格,並儲存將用於更新其他(參考)表格的欄和位移。
伺服器正在執行多表格更新的第二部分,並更新其他表格中相符的列。
執行緒將要請求或正在等待以
GET_LOCK()
呼叫所要求的諮詢鎖定。對於SHOW PROFILE
,此狀態表示執行緒正在請求鎖定(而非等待鎖定)。執行緒已叫用
SLEEP()
呼叫。FLUSH TABLES WITH READ LOCK
正在等待認可鎖定。執行緒正在等待交易認可,相較於查詢處理的其他部分。
執行緒收到通知,表示表格的基礎結構已變更,且需要重新開啟表格以取得新的結構。但是,若要重新開啟表格,必須等到所有其他執行緒都關閉相關表格。
如果另一個執行緒已在相關表格上使用
FLUSH TABLES
或下列其中一個語法,則會發出此通知:FLUSH TABLES
、tbl_name
ALTER TABLE
、RENAME TABLE
、REPAIR TABLE
、ANALYZE TABLE
或OPTIMIZE TABLE
。執行緒正在執行
FLUSH TABLES
,且正在等待所有執行緒關閉其表格,或者執行緒收到通知,表示表格的基礎結構已變更,且需要重新開啟表格以取得新的結構。但是,若要重新開啟表格,必須等到所有其他執行緒都關閉相關表格。如果另一個執行緒已在相關表格上使用
FLUSH TABLES
或下列其中一個語法,則會發出此通知:FLUSH TABLES
、tbl_name
ALTER TABLE
、RENAME TABLE
、REPAIR TABLE
、ANALYZE TABLE
或OPTIMIZE TABLE
。伺服器正在等待取得
THR_LOCK
鎖定或來自中繼資料鎖定子系統的鎖定,其中lock_type
表示鎖定的類型。此狀態表示等待
THR_LOCK
正在等待表格層級鎖定
這些狀態表示等待中繼資料鎖定
正在等待事件中繼資料鎖定
正在等待全域讀取鎖定
正在等待結構描述中繼資料鎖定
正在等待預存函式中繼資料鎖定
正在等待預存程序中繼資料鎖定
正在等待表格中繼資料鎖定
正在等待觸發程序中繼資料鎖定
如需表格鎖定指標的相關資訊,請參閱第 10.11.1 節「內部鎖定方法」。如需中繼資料鎖定的相關資訊,請參閱第 10.11.4 節「中繼資料鎖定」。若要查看哪些鎖定正在封鎖鎖定請求,請使用第 29.12.13 節「效能結構描述鎖定表格」中描述的效能結構描述鎖定表格。
執行緒正在等待條件變為 True 的一般狀態。沒有可用的特定狀態資訊。
伺服器正在將封包寫入網路。