文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  一般執行緒狀態

10.14.3 一般執行緒狀態

下列清單描述與一般查詢處理相關的執行緒 State 值,而非複寫等更專業的活動。 其中許多值僅適用於尋找伺服器中的錯誤。

  • After create

    當執行緒在函式結束時建立資料表(包括內部暫存資料表)時,會發生這種情況。 即使由於某些錯誤而無法建立資料表,也會使用此狀態。

  • altering table

    伺服器正在執行就地 ALTER TABLE

  • Analyzing

    執行緒正在計算 MyISAM 資料表金鑰分佈(例如,針對 ANALYZE TABLE)。

  • checking permissions

    執行緒正在檢查伺服器是否具有執行陳述式所需的權限。

  • Checking table

    執行緒正在執行資料表檢查作業。

  • cleaning up

    執行緒已處理一個命令,並準備釋放記憶體和重設某些狀態變數。

  • closing tables

    執行緒正在將變更的資料表資料刷新到磁碟並關閉使用的資料表。 這應該是一個快速的操作。 如果不是,請驗證您沒有磁碟已滿,且磁碟沒有大量使用。

  • committing alter table to storage engine

    伺服器已完成就地 ALTER TABLE 並正在提交結果。

  • converting HEAP to ondisk

    執行緒正在將內部暫存資料表從 MEMORY 資料表轉換為磁碟上的資料表。

  • copy to tmp table

    執行緒正在處理 ALTER TABLE 陳述式。 此狀態發生在建立具有新結構的資料表之後,但在將列複製到資料表之前。

    對於處於此狀態的執行緒,可以使用效能綱要(Performance Schema)來取得複製操作的進度。請參閱第 29.12.5 節,「效能綱要階段事件表」

  • 複製到群組表

    如果陳述式具有不同的 ORDER BYGROUP BY 條件,則會按群組對列進行排序並複製到暫存表中。

  • 複製到 tmp 表

    伺服器正在複製到記憶體中的暫存表。

  • 複製到磁碟上的 tmp 表

    伺服器正在複製到磁碟上的暫存表。暫存結果集已變得太大(請參閱第 10.4.4 節,「MySQL 中的內部暫存表使用」)。因此,執行緒正在將暫存表從記憶體內格式變更為基於磁碟的格式,以節省記憶體。

  • 建立索引

    執行緒正在為 MyISAM 表處理 ALTER TABLE ... ENABLE KEYS

  • 建立排序索引

    執行緒正在處理使用內部暫存表解析的 SELECT

  • 建立表

    執行緒正在建立表。這包括建立暫存表。

  • 建立 tmp 表

    執行緒正在記憶體中或磁碟上建立暫存表。如果表是在記憶體中建立,但稍後轉換為磁碟上的表,則該操作期間的狀態為 複製到磁碟上的 tmp 表

  • 從主表刪除

    伺服器正在執行多表刪除的第一部分。它僅從第一個表中刪除,並儲存用於從其他(參考)表中刪除的欄和位移。

  • 從參考表刪除

    伺服器正在執行多表刪除的第二部分,並從其他表中刪除匹配的列。

  • discard_or_import_tablespace

    執行緒正在處理 ALTER TABLE ... DISCARD TABLESPACEALTER TABLE ... IMPORT TABLESPACE 陳述式。

  • end

    這發生在 ALTER TABLECREATE VIEWDELETEINSERTSELECTUPDATE 陳述式結束之前,但在清理之前。

    對於 end 狀態,可能會發生以下操作

    • 將事件寫入二進位日誌

    • 釋放記憶體緩衝區,包括 blob 的緩衝區

  • 執行中

    執行緒已開始執行陳述式。

  • 執行 init_command

    執行緒正在執行 init_command 系統變數的值中的陳述式。

  • 釋放項目

    執行緒已執行命令。此狀態通常後接 清理中

  • 全文初始化

    伺服器正在準備執行自然語言全文搜尋。

  • 初始化

    這發生在 ALTER TABLEDELETEINSERTSELECTUPDATE 陳述式初始化之前。伺服器在此狀態下採取的動作包括刷新二進位日誌和 InnoDB 日誌。

  • 已終止

    有人已將 KILL 陳述式傳送到執行緒,並且它應該在下次檢查終止標記時中止。標記會在 MySQL 的每個主要迴圈中檢查,但在某些情況下,執行緒可能仍需短暫的時間才能終止。如果執行緒被其他執行緒鎖定,則終止會在其他執行緒釋放其鎖定後立即生效。

  • 鎖定系統表

    執行緒正在嘗試鎖定系統表(例如,時區或日誌表)。

  • 記錄慢查詢

    執行緒正在將陳述式寫入慢查詢日誌。

  • 登入

    連線執行緒的初始狀態,直到用戶端成功驗證身份。

  • 管理索引鍵

    伺服器正在啟用或停用表索引。

  • 開啟系統表

    執行緒正在嘗試開啟系統表(例如,時區或日誌表)。

  • 開啟表

    執行緒正在嘗試開啟表。這應該是非常快速的程序,除非有某些因素阻止開啟。例如,ALTER TABLELOCK TABLE 陳述式可能會阻止開啟表,直到陳述式完成。此外,值得檢查您的 table_open_cache 值是否足夠大。

    對於系統表,會改用 開啟系統表 狀態。

  • 最佳化中

    伺服器正在對查詢執行初始最佳化。

  • 準備中

    此狀態在查詢最佳化期間發生。

  • 準備變更表

    伺服器正在準備執行就地 ALTER TABLE

  • 清除舊的中繼日誌

    執行緒正在移除不需要的中繼日誌檔案。

  • 查詢結束

    此狀態發生在處理查詢之後,但在 釋放項目 狀態之前。

  • 從用戶端接收

    伺服器正在從用戶端讀取封包。

  • 移除重複項目

    查詢使用 SELECT DISTINCT 的方式,導致 MySQL 無法在早期階段最佳化掉 distinct 操作。因此,MySQL 需要額外的階段才能在將結果傳送給用戶端之前移除所有重複列。

  • 移除 tmp 表

    執行緒正在處理 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_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

  • 正在等待資料表清除

    執行緒正在執行 FLUSH TABLES,並且正在等待所有執行緒關閉其資料表,或者執行緒收到通知,資料表的基礎結構已變更,並且它需要重新開啟資料表以取得新的結構。但是,為了重新開啟資料表,它必須等待直到所有其他執行緒都關閉了有問題的資料表。

    如果另一個執行緒在有問題的資料表上使用了 FLUSH TABLES 或下列陳述式之一,則會發生此通知:FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE

  • 正在等待 lock_type 鎖定

    伺服器正在等待取得 THR_LOCK 鎖定或來自中繼資料鎖定子系統的鎖定,其中 lock_type 指示鎖定類型。

    此狀態表示等待 THR_LOCK

    • 正在等待資料表層級鎖定

    這些狀態表示等待中繼資料鎖定

    • 正在等待事件中繼資料鎖定

    • 正在等待全域讀取鎖定

    • 正在等待結構描述中繼資料鎖定

    • 正在等待儲存函數中繼資料鎖定

    • 正在等待儲存程序中繼資料鎖定

    • 正在等待資料表中繼資料鎖定

    • 正在等待觸發中繼資料鎖定

    如需有關資料表鎖定指示器的資訊,請參閱 第 10.11.1 節,「內部鎖定方法」。如需有關中繼資料鎖定的資訊,請參閱 第 10.11.4 節,「中繼資料鎖定」。若要查看哪些鎖定正在封鎖鎖定要求,請使用 第 29.12.13 節,「效能結構描述鎖定資料表」 中描述的效能結構描述鎖定資料表。

  • 正在等待條件

    一個泛用狀態,表示執行緒正在等待某個條件為真。沒有可用的特定狀態資訊。

  • 寫入網路

    伺服器正在將封包寫入網路。