ANALYZE TABLE 表後,數據庫大量查詢狀態變成 Waiting for table flush

          一次在處理慢查詢時,對錶做了分析,ANALYZE TABLE ,之後不久,應用反應數據庫查詢很慢,通過

show full processlit;

查看 發現與該表相關的大量查詢狀態均變成了Waiting for table flush。

mysql決定使用哪一個執行計劃的是由所使用存儲引擎提供的相關信息。

        觸發Waiting for table flush條件:

1.大量併發

2.長時間運行狀態的查詢

3.在對一個表進行長時間運行狀態的查詢時執行ANALYZE TABLE


造成此問題原因是當ANALYZE TABLE後,需要查詢這個表的線程狀態變爲等待,因爲mysql已經檢測到表信息已經改變,

它需要關閉重新使用FLUSH打開此表.因此表將被鎖住,直到所有已經運行的查詢結束。

解決此問題只有兩個方法,要麼殺掉所有的長查詢或等查詢結束 ,要麼在低負載下執行。

 FLUSH TABLES, ALTER, RENAME, OPTIMIZE ,REPAIR  都有可能引發線程狀態變爲

“Waiting for tables”, “Waiting for table” , “Waiting for table flush”.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章