是什麼意思,如果MySQL查詢:當MySQL處於「發送數據」狀態時,這意味着什麼?
SHOW PROCESSLIST;
回報狀態列中的「發送數據」?
我想這意味着查詢已被執行,並且MySQL正在向客戶端發送「結果」數據,但我想知道爲什麼需要這麼多時間(長達一個小時)。
謝謝。
是什麼意思,如果MySQL查詢:當MySQL處於「發送數據」狀態時,這意味着什麼?
SHOW PROCESSLIST;
回報狀態列中的「發送數據」?
我想這意味着查詢已被執行,並且MySQL正在向客戶端發送「結果」數據,但我想知道爲什麼需要這麼多時間(長達一個小時)。
謝謝。
這是一個相當令人誤解的狀態。它應該被稱爲「讀取和過濾數據」。
這意味着MySQL
有一些數據存儲在磁盤(或內存)中,這些數據還有待讀取和發送。它可以是表本身,索引,臨時表,排序輸出等。
如果你有一個1M記錄表(沒有索引),你只需要一條記錄,MySQL
仍然會輸出狀態爲掃描表時發送「發送數據」,儘管它尚未發送任何內容。
在此狀態下:
線程是的 SELECT語句讀取和處理行,並且將數據發送到客戶端。
因爲在此狀態期間發生的操作往往會執行 大量磁盤訪問(讀取)。
這就是爲什麼它需要更多的時間來完成,所以是在給定的查詢的壽命運行時間最長的狀態。
這意味着它將數據從其進程傳輸到客戶端。如果您在運行「SHOW PROFILE」之後看到'發送數據'作爲一個需要花費時間的步驟,那麼實際上消耗的時間就屬於之前的步驟。 – 2012-04-27 08:24:49
不幸的是,我收到一條消息,'SHOW PROFILE'功能被禁用,我必須使用'enable-profiling'構建MySQL。但是感謝您的回覆。 – user1345414 2012-04-27 08:38:49
這是另外一個問題。查詢已在內部完成,是否像網絡或總線一樣傳輸資源? – user1345414 2012-04-27 08:45:58