這個指令中最關鍵的就是state列,mysql列出的狀态主要有以下幾種:
狀态
含義
After create
當線程建立表(包括臨時表)
Analyzing
線程正在分析MYISAM的key分布
checking permissions
線程正在檢查執行語句的權限
Checking table
線程正在執行表check操作
cleaning up
線程已經處理完一個指令然後開始準備釋放記憶體和reset狀态變量
closing tables
線程把改變的表資料flush到磁盤然後關閉使用的表。這個操作應該是很快的,如果這個狀态長時間出現,要留意檢查磁盤的狀态。
<code>converting HEAP to MyISAM</code>
把一個記憶體中的臨時表轉換到磁盤上的MYISAM表
copy to tmp table
線程執行alter table語句。這個狀态出現在新的表結構已經建立但資料還在拷貝到新表之前。
<code>Copying to group table</code>
如果一個語句的group by和order by 條件不同,資料通過group by來排序然後拷貝到臨時表
Copying to tmp table
拷貝到記憶體中的臨時表
<code>Copying to tmp table on disk</code>
如果臨時表過大,伺服器要把記憶體中的臨時表拷貝到磁盤。
Creating index
對一個MYISAM 執行<code>ALTER TABLE ... ENABLE KEYS</code>
<code>Creating sort index</code>
線程通過執行一個臨時表來執行select語句
creating table
線程正在建立表(包括臨時表)
<code>Creating tmp table</code>
建立臨時表(在記憶體或者磁盤)上,如果表一開始在記憶體中到後面太大,臨時表就會轉換到磁盤上,而且狀态也會變成<code>Copying to tmp table on disk</code>
deleting from main table
伺服器正在執行一個多表delete語句的第一部分,也就是從第一張表删除資料,并且保留行以及偏移量資料以用來删除其他表中的資料。
<code>deleting from reference tables</code>
伺服器正在執行一個多表delete語句的二部分
discard_or_import_tablespace
線程正在執行<code>ALTER TABLE ... DISCARD TABLESPACE</code> 或者<code>ALTER TABLE ... IMPORT TABLESPACE</code> 語句.
end
這個狀态出現在<code>ALTER TABLE</code>, <code>CREATE VIEW</code>, <code>DELETE</code>, <code>INSERT</code>, <code>SELECT</code>, <code>UPDATE語句結束之後,但在清理以前。</code>
executing
線程開始執行一個語句
Execution of init_command
線程在init_command系統變量中執行語句
freeing items
線程已經執行指令。一些釋放
Flushing tables
這個線程執行了<code>FLUSH TABLES,而且等待所有的線程關閉表</code>
<code>FULLTEXT initialization</code>
伺服器準備執行文本搜尋
init
Killed
發送了kill 語句給這個查詢。這個語句在下次檢查kill标志的時候,這個語句就應該放棄掉
Locked
查詢被其他的查詢鎖住了
logging slow query
線程正在把慢sql寫到慢查詢log檔案中
NULL
login
直到線程授權成功以前都是這個狀态
manage keys
伺服器正在卡哭泣或者關閉表的索引
<code>Opening tables</code>, <code>Opening table</code>
線程正在打開表。這個操作是很快的,除非有其他原因阻止了打開操作,例如<code>ALTER TABLE</code> <code>LOCK TABLE</code>
optimizing
伺服器正在進行一個查詢的初始階段優化
preparing
正在進行查詢優化
Purging old relay logs
線程删除不需要的relay log檔案
query end
這個狀态出現在處理完以後但在當機item之前
Reading from net
伺服器從網絡讀取包
<code>Removing duplicates</code>
查詢使用了select distinct。mysq在發送資料到用戶端之前需要一個額外的過程來删除重複的行
removing tmp table
在執行了select語句以後,線程正在删除内部的臨時表
rename
線程正在重命名表
rename result table
線程正在執行一個alter table語句,而且已經建立了新表,對新表重命名來替換原始表。
Reopen tables
線程擷取了一個表的鎖。由于它已經得知它依賴的表結構已經發生了變化。線程需要釋放鎖、關閉表、然後嘗試重新打開他。
Repair by sorting
修複代碼通過排序來建立索引。
Repair done
線程完成了對一個myisam表的多線程修複。
Repair with keycache
修複代碼正在通過key的緩存建立key。
Rolling back
線程正在復原事物。
Saving state
myisam的analysis和repair操作中,線程會把表的一些資訊例如表的行數、<code>AUTO_INCREMENT的計數器以及key的分布都儲存到.MYI檔案的頭部</code>
Searching rows for update
語句執行的第一個階段,找到所有滿足條件的行記錄
Sending data
線程在讀取和處理SELECT語句,發送資料到用戶端。由于語句需要大量的磁盤通路,這個狀态會在語句的整個生命周期中占據最長的一個狀态。
setup
線程開始進行ALTER TABLE 語句
Sorting for group
線程正在為group by 執行排序
Sorting for order
線程正在為order by 執行排序
Sorting index
在myisam表的優化操作中,進行索引頁的排序以便獲得更好的通路性能。
Sorting result
對結果進行排序
statistics
伺服器正在計算統計資料進而來生成一個執行計劃。如果一個線程保留這個狀态很長的時間,意味着伺服器在執行其他的磁盤相關的工作。
System lock
線程正在請求和擷取一個内部和外部鎖。如果有這個狀态
Table lock
System Lock後的另一個線程狀态。線程已經擷取了一個外部鎖,然後接下來要去擷取一個内部表鎖。
update
線程已經準備好去更新
Updating
現在正在找或者正在更新行
<code>updating main table</code>
伺服器正在執行一個多表update語句,正在更新第一張表,儲存行和偏移量以用來更新其他表。
<code>updating reference tables</code>
伺服器正在執行一個多表update語句的第二部分,正在從其他表更新行
User lock
請求或者等待擷取一個鎖
<code>User sleep</code>
線程sleep
<code>Waiting for release of readlock</code>
等待一個全局的讀鎖
<code>Waiting for tables</code>, <code>Waiting for table</code>
線程獲得提示依賴的表結構發生了改變,線程需要重新打開表來擷取新的結構。但是,重新打開表是需要等待其他的線程關閉表。
Waiting on cond
線程正在等條件變成true
Waiting to get readlock
線程用<code>FLUSH TABLES WITH READ LOCK語句,是以要獲得一個全局的讀鎖,這個狀态表示正在等這個鎖。</code>
<code>Writing to net</code>
伺服器把包寫到網絡
本文轉自 freeterman 51CTO部落格,原文連結:http://blog.51cto.com/myunix/1742367,如需轉載請自行聯系原作者