如何确定 MySQL 服务器变慢并且请求有时超时的原因?

Nat*_*ate 7 mysql performance database-tuning

我正在开展我的第一个项目,该项目大量使用 MySQL 数据库,并且正在努力理解我遇到的性能问题。

大多数情况下,响应会从服务器快速返回,但是当我有某些脚本在后台运行大量查询(读取和写入数据)时,我发现其他请求接收响应的速度很慢,或者完全超时。

举个例子,昨天当一个进行大量数据库查询的 PHP 脚本正在运行时,对服务器的请求在返回响应之前进行了大量查询的页面超时 - 我什至无法使用 Navicat 连接到数据库,因为它也超时了。

在上面的例子中,我在 SSH 控制台中运行 top/htop,发现 CPU 使用率非常低,内存使用率只有 50% 左右。因此,我认为问题出在数据库上,但我无法理解导致问题的原因,例如它们是否可能是由于:

  • 慢查询
  • 太多联系
  • 每秒查询过多
  • 我不知道的其他潜在问题

我知道慢查询日志,但我的查询都不是很慢。

我可以使用哪些方法或工具来确定导致 MySQL 数据库变慢,有时甚至请求超时的原因?

And*_*nan 7

您需要调整您的数据库。这是一个复杂的过程,有许多变量和决策树。没有具体说明,我们只能真正让您从这里开始。

如果您的脚本运行大量 SQL 并减慢您的数据库速度,并且您的 cpu 和内存使用情况在它运行时很好,那么您可能遇到了 I/O 问题。即您正在敲打磁盘。您需要查看脚本中使用的 SQL 并对其进行调整。例如,它可能会生成大量全表扫描或创建过多会减慢数据库速度的事务日志。首先,检查是否发生了任何不必要的全表扫描,并查看是否可以向相关列添加索引以减少 I/O。然后报告回来,我们可以从那里出发。

上面链接的 MySQLtuner 脚本非常好,但如果您对数据库没有经验,理解结果可能对您来说具有挑战性。在开始之前,请阅读主页上的免责声明:https : //github.com/major/MySQLTuner-perl