首先,测试环境上线新版本,并且通过黑盒测试以及功能测试。
然后,我们就上线了新的版本。
但是在运行3天后,整个服务器大部分接口都失效了,基本上都是timeout。
检查服务器情况 cpu基本上占满了。
接着查了数据库状态,
通过mysql命令show processlist;存在大量的Waiting for table flush状态的sql语句。
其中找到了一条语句在ANALYZE TABLE的语句。
问题找到了 是这条语句很慢,而且同时的并发导致需要查询这个表的线程状态变为等待,因为mysql已经检测到表信息已经改变,
它需要关闭重新使用FLUSH打开此表.因此表将被锁住,直到所有已经运行的查询结束。
最后 直接杀掉了所有在执行的sql 就好了。
接下来,我们对执行的慢sql进行了优化 以及缓存处理 就好了。
要重视慢查询问题,有可能会引发灾难性的后果。