情况是这样的,我运营着一个规模相当大的网站,每天晚上都会进行日常备份。自从我搬到新服务器后,我注意到备份后我的平均负载会跳升到 24+(我有 24 个核心),而正常情况下是 5-6。看来 mysql 可能工作繁忙,并且发生了表损坏(总碎片表:26)。此外,我相信它会导致内存转储,因为(已使用 26099120k,可用 6856320k),并且最多有 40% 分配给了 TOP 中列出的正在运行的进程。
我认为一些表已损坏,并导致过载和内存泄漏。数据库大约有 4 gGB(MyISAM 和 InnoDB),我使用 mysqldump 转储数据库。备份时我应该修复表并关闭 Web 服务器吗?
操作系统:Centos Mysql版本:5.0.77(我需要升级它)
答案1
分裂不是腐败。
无论如何,都要修复碎片(optimize table table_name;
-请注意,这将在操作期间锁定表)-在备份未运行时以及备份期间,它可能是对负载的主要贡献者。
我强烈建议您在与 Web 服务器不同的系统上运行数据库,而不是逐步增加运行整个堆栈的大型服务器。这样可以更轻松地找出应用程序中的瓶颈,并允许您更具体地分配资源(而不是强迫 MySQL 和 Web 服务器争夺相同的 RAM)。