如果 MySQL 占用太多处理能力,有没有办法自动重新启动它?

Chr*_*ede 1 mysql central-processing-unit process apache-2.2

由于我的一些糟糕的脚本,MySQL 有时会出问题 - 占用大量 CPU 能力(平均负载超过 20 - 我只有 8 个内核)!当我重新启动时,一切又好了。

所以我的问题是:当 MySQL 占用超过 400% 的 CPU 时,有没有办法重新启动它?

我最好只重启导致问题的关联帐户。

服务器:带有 whm 的 Linux

Duk*_*ion 16

在这种情况下重新启动 mysql 是一种不好的做法。它会导致缓冲区抖动,如果您的数据库足够大 - 需要一些时间来预热。

我想您有一些消耗过多 cpu 的繁重查询。

使用mysql> show full processlist来识别长时间运行的查询,并尝试对其进行优化:创建索引,重新编写查询运行速度更快,少做排序。

为了立即获得结果,您可以使用以下方法终止此查询:

mysql> kill QUERYIDNUMBER

直接回答您的问题 - 您可以使用 安全地重新启动它service mysql restart,但这需要很长时间。重新启动将阻止与数据库的所有新连接,但它会等到所有正在运行的查询完成。您可以终止繁重的查询以加快速度。

此外,如果您需要加快 mysql 重新启动的速度,那么有一个很好的技巧可以做到。

首先,运行mysql> set global innodb_max_dirty_pages_pct = 0; 然后等待所有(或几乎所有)脏缓冲区页面刷新到磁盘,参见 mysqladmin ext -i10 | grep dirty

当你有这样的输出时:

| Innodb_buffer_pool_pages_dirty | 12 |

您可以重新启动 mysql 服务器,它会更快:

service mysql restart


Oli*_*ver 6

我只能重复一遍,试图通过重新启动 mysql 来解决该问题确实是一个坏主意。您应该尝试识别和优化导致服务器过载的查询。

两个提示可以帮助您:

  1. mysqltuner.pl将分析您当前的配置并向您展示一些明显的性能杀手在哪里。
  2. 慢查询日志会记录所有超过配置时间较长持久查询。然后,您可以使用EXPLAINSQL 命令分析各个查询。