mysql - 应用程序因 MySQL 服务器负载过重而宕机

标签 mysql percona

我们有一个2GB的Digital Ocean服务器,另外两个PHP服务器一个MySQL服务器专用。我们在此服务器上使用 Percona MySQL Server 5.6。我们配置了 MySQL 复制,这些配置工作正常

我们的问题是有时我们的网站监控工具报告说该服务器托管的某些 URL 已关闭(可能一两周发生一次)。我检查的时候发现Mysql Master服务器负载过高(可能是35-40),所以MySQL服务器没有响应。 @我通常会重新启动 MySQl 服务,这种重新启动会导致服务器负载正常,并且站点在服务重新启动后开始工作。

这是 20-25 个 PHP 应用程序(WordPress、Drupal 和一些自定义应用程序服务器)的后端 MySQL 数据库服务器。

这是我的问题,

  1. 为什么服务器负载会在峰值出现后自动下降?
  2. 数据库是否存在问题?这样我也可以识别应用程序。
  3. 我如何确定此问题的根本原因

最佳答案

根据您的工作数据集,为 20-25 个 PHP 应用程序(WordPress、Drupal 和一些自定义应用程序服务器)提供访问权限的 2GB 服务器可能会成为问题。

例如,如果您有一个 1.4GB 的缓冲池(假设所有表都是 InnnoDB)和 10GB 的数据,那么您的各种应用程序最终可能会争夺资源,例如 I/O、缓冲池页面、自适应哈希索引, 查询缓存。假设使用了缓存,他们还可以在类似的时间范围内使缓存失效,从而向数据库发送昂贵的查询。

虽然 50 的负载是您通常希望避免的,但如果单独显示,则负载平均值不是您应该关心的问题。

The use of the uninterruptible state has since grown in the Linux kernel, and nowadays includes uninterruptible lock primitives. If the load average is a measure of demand in terms of running and waiting threads (and not strictly threads wanting hardware resources), then they are still working the way we want them to.

http://www.brendangregg.com/blog/2017-08-08/linux-load-averages.html

如果问题每周发生一次,那么它开始听起来像是一个批处理过程或缓存过期问题 - 对于可用资源来说一次发生的太多了。

最好的办法是监控并查找原因。由于您已经在使用 Percona Server,因此使用 PMM尽管它适用于 Oracle MySQL、MariaDB、Aurora 等,但应该会给您完美的洞察力来找到原因。您可以尝试演示以查看可以获得的洞察力: https://pmmdemo.percona.com .该软件是开源的,可以免费使用。

可以看QAN找到最昂贵的查询,同时查看 Prometheus 数据以深入了解主机本身。有some recommendations根据您对 MySQL 的喜好,从 PMM 中获得最大 yield 。

关于mysql - 应用程序因 MySQL 服务器负载过重而宕机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256808/

相关文章:

php - PHP 数组中带有条件的 if 语句

php - jQuery 无法检索数据库更新

java - 运行长 MySQL 线程时,Spigot 服务器 "stops responding "

mysql - Percona 工具包在线架构更改 : Possible to add multiple columns all at once?

mysql - Percona 的 my.cnf 文件在哪里?

mysql - MariaDB vs Drizzle vs Percona Server vs MySQL

php连接3个表然后插入到第4个表

java - JBoss 连接池创建许多到 MySQL 的连接

mysql - 需要mysql查询/配置优化

php - 未捕获的 PDOException : could not find driver