共計 4573 個字符,預計需要花費 12 分鐘才能閱讀完成。
這篇文章主要介紹了 MySQL 線程狀態怎么看,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
簡單翻譯下:
After create
當線程在創建表的函數末尾創建表(包括內部臨時表)時,會發生這種情況。即使由于某些錯誤而無法創建表,也會使用此狀態。
Analyzing
線程正在計算 MyISAM 表鍵分布(例如,for
ANALYZE TABLE)。
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 狀態,可能會發生以下操作:
刪除表中的數據后刪除查詢緩存條目
將事件寫入二進制日志
釋放內存緩沖區,包括 blob
Killed
有人 KILL
向線程發送了一個語句,它應該在下次檢查 kill 標志時中止。在 MySQL 的每個主循環中檢查該標志,但在某些情況下,線程可能仍然需要很短的時間才能死掉。如果線程被某個其他線程鎖定,則一旦另一個線程釋放其鎖定,kill 就會生效。
logging slow query
該線程正在向慢查詢日志寫一條語句。
login
連接線程的初始狀態,直到客戶端成功通過身份驗證。
manage keys
服務器正在啟用或禁用表索引。
NULL
該狀態用于該 SHOW PROCESSLIST 狀態。
Opening tables
線程正在嘗試打開一個表。這應該是非常快的程序,除非有什么東西阻止打開。例如,一個 ALTER TABLE 或一個
LOCK TABLE 語句可以阻止在語句結束之前打開表。
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。如果此狀態是由外部鎖的請求引起的,并且您沒有使用多個訪問相同 表的 mysqld 服務器,則 MyISAM 可以使用該 –skip-external-locking
選項禁用外部系統鎖。但是,默認情況下禁用外部鎖定,因此該選項很可能無效。對于
SHOW PROFILE,這個狀態意味著線程正在請求鎖定(不等待它)。
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 event metadata lock
Waiting for global read lock
Waiting for schema metadata lock
Waiting for stored function metadata lock
Waiting for stored procedure metadata lock
Waiting for table metadata lock
Waiting for trigger metadata lock
Waiting for table level lock
Waiting on cond
線程正在等待條件變為真的通用狀態。沒有具體的州信息。
Writing to net
服務器正在將數據包寫入網絡。Sending to client 從 MySQL 5.7.8 開始調用此狀態。
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“MySQL 線程狀態怎么看”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!