下列清單描述與一般查詢處理相關的執行緒 State
值,而非複寫等更專業的活動。 其中許多值僅適用於尋找伺服器中的錯誤。
當執行緒在函式結束時建立資料表(包括內部暫存資料表)時,會發生這種情況。 即使由於某些錯誤而無法建立資料表,也會使用此狀態。
伺服器正在執行就地
ALTER TABLE
。執行緒正在計算
MyISAM
資料表金鑰分佈(例如,針對ANALYZE TABLE
)。執行緒正在檢查伺服器是否具有執行陳述式所需的權限。
執行緒正在執行資料表檢查作業。
執行緒已處理一個命令,並準備釋放記憶體和重設某些狀態變數。
執行緒正在將變更的資料表資料刷新到磁碟並關閉使用的資料表。 這應該是一個快速的操作。 如果不是,請驗證您沒有磁碟已滿,且磁碟沒有大量使用。
committing alter table to storage engine
伺服器已完成就地
ALTER TABLE
並正在提交結果。執行緒正在將內部暫存資料表從
MEMORY
資料表轉換為磁碟上的資料表。執行緒正在處理
ALTER TABLE
陳述式。 此狀態發生在建立具有新結構的資料表之後,但在將列複製到資料表之前。對於處於此狀態的執行緒,可以使用效能綱要(Performance Schema)來取得複製操作的進度。請參閱第 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
陳述式結束之前,但在清理之前。對於
end
狀態,可能會發生以下操作將事件寫入二進位日誌
釋放記憶體緩衝區,包括 blob 的緩衝區
執行緒已開始執行陳述式。
執行緒正在執行
init_command
系統變數的值中的陳述式。執行緒已執行命令。此狀態通常後接
清理中
。伺服器正在準備執行自然語言全文搜尋。
這發生在
ALTER TABLE
、DELETE
、INSERT
、SELECT
或UPDATE
陳述式初始化之前。伺服器在此狀態下採取的動作包括刷新二進位日誌和InnoDB
日誌。有人已將
KILL
陳述式傳送到執行緒,並且它應該在下次檢查終止標記時中止。標記會在 MySQL 的每個主要迴圈中檢查,但在某些情況下,執行緒可能仍需短暫的時間才能終止。如果執行緒被其他執行緒鎖定,則終止會在其他執行緒釋放其鎖定後立即生效。執行緒正在嘗試鎖定系統表(例如,時區或日誌表)。
執行緒正在將陳述式寫入慢查詢日誌。
連線執行緒的初始狀態,直到用戶端成功驗證身份。
伺服器正在啟用或停用表索引。
執行緒正在嘗試開啟系統表(例如,時區或日誌表)。
執行緒正在嘗試開啟表。這應該是非常快速的程序,除非有某些因素阻止開啟。例如,
ALTER TABLE
或LOCK TABLE
陳述式可能會阻止開啟表,直到陳述式完成。此外,值得檢查您的table_open_cache
值是否足夠大。對於系統表,會改用
開啟系統表
狀態。伺服器正在對查詢執行初始最佳化。
此狀態在查詢最佳化期間發生。
伺服器正在準備執行就地
ALTER TABLE
。執行緒正在移除不需要的中繼日誌檔案。
此狀態發生在處理查詢之後,但在
釋放項目
狀態之前。伺服器正在從用戶端讀取封包。
查詢使用
SELECT DISTINCT
的方式,導致 MySQL 無法在早期階段最佳化掉 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 節,「效能結構描述鎖定資料表」 中描述的效能結構描述鎖定資料表。
一個泛用狀態,表示執行緒正在等待某個條件為真。沒有可用的特定狀態資訊。
伺服器正在將封包寫入網路。