2

我有一个托管许多数据库(〜30)的mysql服务器(5.0.58)。几年前,我开始遇到一些 db 的性能问题,我最终通过执行每晚的 cron 作业来使用以下命令检查/优化数据库来解决这个问题:

mysqlcheck --check --auto-repair --analyze --optimize --silent --all-databases

此命令通常在 ~ 20 分钟内执行。这就像一个魅力,直到上个月。现在执行此命令时,机器上的 CPU 会出现峰值,机器几乎没有响应。我唯一能做的就是重新启动 mysqld 服务(等待 10-15 分钟后才能登录)。在查看mysql进程列表时出现这种情况,似乎有些表也可能被锁定,但我仍在研究这个。

任何人都知道为什么这个命令会锁定服务器?我打算尝试将命令限制为特定数据库(而不是 --all-databases),看看这是否有帮助。

4

1 回答 1

0

为什么 mysqlcheck 会卡住计算机?

也许你用尽了所有可用的 RAM,而 mysql 开始使用虚拟交换空间,这需要大量的磁盘读取/写入并耗尽所有 CPU。通过添加 RAM 或一次在更少的数据库上执行 mysqlcheck 来测试这个理论。

也许您已经填满了您的硬盘空间并且进程必须等待可用的硬盘空间,因为它已被保留(即使驱动器未完全填满)。通过释放硬盘空间来测试这个理论。

也许您的 CPU 正在抖动,这意味着 CPU 所做的大部分工作是在任务之间切换,而不是执行任务。尝试按顺序对每个单独的数据库执行命令。

解决方法:

尝试mysqlcheck以较低的优先级运行,以便您仍然可以登录并且不会阻止其他进程运行。这取决于您使用的操作系统。

于 2013-01-15T20:12:03.680 回答