【问题标题】:mysqlcheck causing server issue using 100% cpu, server not responsivemysqlcheck 使用 100% cpu 导致服务器问题,服务器无响应
【发布时间】:2013-01-15 19:35:53
【问题描述】:

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

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

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

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

【问题讨论】:

  • 为了将来参考,数据库问题不属于这里,有一个专门为它们设计的子站点。登录并在dba.stackexchange.com/questions 上发布未来的问题,您将获得更高的接收率。
  • MySQL当前版本是5.5,你报5.0.58。这可能是软件中的错误,更新到最新版本可能会解决您的问题。

标签: mysql database cpu-usage


【解决方案1】:

为什么 mysqlcheck 会卡住电脑?

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

也许您的硬盘空间已满,进程必须等待可用的硬盘空间,因为所有硬盘空间都已保留(即使硬盘未完全装满)。通过释放硬盘空间来测试这个理论。

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

解决方法:

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

【讨论】:

  • 感谢您的回复埃里克。我确认有足够的磁盘空间可用,但在此命令运行时没有查看 RAM。我会尽快尝试的。我还将使用您以较低优先级运行的建议。我相当肯定在单个数据库上运行命令会有所帮助(我已经手动运行了几次),但这有点不方便。不过,这可能是最好的解决方法。我会尝试其中一些,让你知道它是怎么回事。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多