我的 Linux MySQL 服务器非常繁忙,并且拥有庞大的数据库。
服务器通常在平均负载2或更低的情况下工作。
该服务器具有软件 raid(mdadm),目前正在重建。
今天有几次,MySQL 变慢了,平均负载达到 200-300-500。
同时 iostat 也不大 – 最多 20-30%。
目前,交换已关闭,因为我认为它会导致问题。
重启 MySQL 没有用。如果我们重启服务器,几个小时后一切都会恢复正常。
上次,我决定停止 MySQL 并删除缓存,而不是重新启动。我这样做了:
sync; echo 1 > /proc/sys/vm/drop_caches
sync; echo 2 > /proc/sys/vm/drop_caches
sync; echo 3 > /proc/sys/vm/drop_caches
(是的,我连续做了三次)
令我惊讶的是,当我启动 MySQL 时,一切都恢复正常。
可能存在什么问题?我能否以某种方式自动执行“删除缓存”以防止服务器至少在接下来的几天内变慢。
答案1
RAID 重建后,我们再次重启服务器,一切就恢复正常了。
我们认为,在 RAID 重建期间,Linux 使用了大量内存,而服务器实际上已经内存不足。
答案2
答案可以通过发布到您的原始问题来提供:
主机上可用的 RAM
SHOW GLOBAL STATUS;
SHOW GLOBAL VARIABLES;
SHOW ENGINE INNODB STATUS;