有时我们的表中的某些索引会被破坏,并且数据库开始消耗100%的CPU负载,并且在一段时间内它会完全卡住。即使是简单的查询也无法完成,重启也无法提供帮助。
我发现要么逐个删除并重新创建索引(可能需要花费很长时间和大量调查),要么只是在可疑表上调用alter table mytable engine=innodb;
。这实际上非常好,它修复了一切,一切恢复正常。但是我不知道背景中究竟发生了什么以及为什么会有所帮助。此外 - 每月手动执行此操作会有所帮助吗?自动化这个是个好主意吗?有没有办法进行一些DB健康检查?
答案 0 :(得分:0)
猜猜......
你有一个旧版本的MySQL / Percona,一个没有"持久性统计数据"或者没有启用它。
您有一个讨厌的查询,有时会导致优化程序选择错误的查询计划。
快速修复(可能有效或无效)是在慢查询中运行表的ANALYZE TABLE
。
更好的解决方法可能是升级版本。
与此同时,让我们看一下查询,其EXPLAIN
和SHOW CREATE TABLE
代表所涉及的每个表格。这可能是一种将其重新制定为不那么片状的方法。