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”.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值