SELECT @@profiling;
SHOW VARIABLES LIKE '%profil%';
-- 開啟 profiling 引數
-- SET profiling = 1;
SHOW PROFILES;
SHOW PROFILE CPU, BLOCK IO FOR QUERY 2;
複製程式碼
以下列表描述了與常規查詢處理相關聯的執行緒狀態值,而不是更復雜的特殊活動。其中許多僅用於查詢伺服器中的錯誤。
After create
當執行緒在建立表的函式末尾建立表(包括內部臨時表)時,會發生這種情況。即使由於某些錯誤而無法建立表,也會使用此狀態。
Analyzing
該執行緒正在計算MyISAM表鍵分佈(例如,對於ANALYZE TABLE)。
checking permissions
執行緒正在檢查伺服器是否具有執行該語句所需的許可權。
Checking table
該執行緒正在執行表檢查操作。
cleaning up
該執行緒已經處理了一個命令,並準備釋放記憶體並重置某些狀態變數。
converting HEAP to ondisk
該執行緒正在將內部臨時表從MEMORY錶轉換為磁碟表。
copy to tmp table
該執行緒正在處理ALTER TABLE語句。在建立具有新結構的表但在將行復制到其中之前,將發生此狀態。
對於處於此狀態的執行緒,可以使用效能模式來獲取有關複製操作的進度。請參見第25.11.5節“效能模式階段事件表”。
Copying to group table
如果語句具有不同的ORDER BY和GROUP BY條件, 則按組對行進行排序並將其複製到臨時表。
Copying to tmp table
伺服器正在複製到記憶體中的臨時表。
altering table
伺服器正在執行就地ALTER TABLE。
Copying to tmp table on disk
伺服器正在複製到磁碟上的臨時表。臨時結果集變得太大了 (see Section 8.4.4, “Internal Temporary Table Use in MySQL”). 因此,執行緒正在將臨時表從記憶體更改為基於磁碟的格式以節省記憶體。
Creating index
該執行緒正在為MyISAM表處理ALTER TABLE ... ENABLE KEYS。
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語句可以阻止在語句結束之前開啟表。還值得檢查您的table_open_cache價值是否足夠大。
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檔案頭。State包括諸如行數, 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
執行緒正在進行排序以滿足a 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
該執行緒得到一個通知,表明表的底層結構已經改變,它需要重新開啟表以獲得新結構。但是,要重新開啟表,它必須等到所有其他執行緒關閉了相關表。
該通知發生如果另一個執行緒已使用 FLUSH TABLES或有問題的表下面的語句之一: , , , , ,或 。 FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE
Waiting for table flush
執行緒正在執行FLUSH TABLES並正在等待所有執行緒關閉它們的表,或者執行緒得到一個表的基礎結構已經更改的通知,並且需要重新開啟表以獲取新結構。但是,要重新開啟表,它必須等到所有其他執行緒關閉了相關表。
該通知發生如果另一個執行緒已使用 FLUSH TABLES或有問題的表下面的語句之一: , , , , ,或 。 FLUSH TABLES tbl_nameALTER TABLERENAME TABLEREPAIR TABLEANALYZE TABLEOPTIMIZE TABLE
Waiting for lock_type lock
伺服器正在等待THR_LOCK從後設資料鎖定子系統獲取 鎖定或鎖定,其中 lock_type指示鎖定的型別。
此狀態表示等待 THR_LOCK:
Waiting for table level 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
有關表鎖指示器的資訊,請參見 第8.11.1節“內部鎖定方法”。有關後設資料鎖定的資訊,請參見第8.11.4節“後設資料鎖定”。要檢視哪些鎖阻止了鎖請求,請使用 第25.11.12節“效能模式鎖表”中所述的效能模式鎖表。
Waiting on cond
執行緒正在等待條件變為真的通用狀態。沒有具體的州資訊。
Writing to net
伺服器正在將資料包寫入網路。Sending to client從MySQL 5.7.8開始呼叫此狀態。