Waiting for table flush 阻塞查詢的問題

一、此狀態表示大量thread正在等待慢查詢語句執行完成。mysql

緣由:sql

The thread got a notification that the underlying structure for a table has changed
and it needs to reopen the table to get the new structure.
However, to reopen the table,
it must wait until all other threads have closed the table in question.
This notification takes place if another thread has used FLUSH TABLES
or one of the following statements on the table in question:
FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, orOPTIMIZE TABLE.數據庫

 

翻譯優化

主要是由於有慢查詢正在進行的時候 ,執行了相似於flush tables的操做。致使flush tables 阻塞,導致後續查詢收到表變動通知,須要等待從新打開表。.net

即便這個時候中止flush tables操做也不會立刻恢復,這些大量的Waiting for table flush 線程會等到以前的慢查詢終止纔會執行。線程

 

 

二、易引起這種狀況的操做翻譯

慢查詢+FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, orOPTIMIZE TABLE  這些操做。blog

例如:好比在mysqldump、innobackupex進行備份時就頗有可能引起這種狀況。get

 

三、解決方案it

找出慢查詢kill掉,並進行SQL優化防止再次引起。

 

四、預防措施

在業務高峯期不要對數據庫進行FLUSH TABLES tbl_name, ALTER TABLE, RENAME TABLE, REPAIR TABLE, ANALYZE TABLE, orOPTIMIZE TABLE 這些操做。

備份、DDL語句等操做盡可能避開業務高峯。

 

複製來源:https://blog.csdn.net/donghaixiaolongwang/article/details/76099697

相關文章
相關標籤/搜索