【问题标题】:Applications downs due to heavy MySQL server load由于 MySQL 服务器负载过重导致应用程序停机
【发布时间】:2018-01-15 04:06:16
【问题描述】:

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

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

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

这是我的问题,

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

【问题讨论】:

  • 通常这些是由长时间运行的 mysql 查询引起的。最好找到并优化这些。我怀疑缺少索引和 cron 作业疯了。

标签: mysql percona


【解决方案1】:

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

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

虽然您通常希望避免 50 的负载,但如果单独显示负载平均值,则不必担心。

从那时起,不间断状态的使用在 Linux 中得到了发展 内核,现在包括不间断的锁原语。如果 平均负载是在运行和等待方面的需求量度 线程(而不是严格意义上需要硬件资源的线程),然后 他们仍在按照我们希望的方式工作。

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 可以从PMM 中获得最大收益,具体取决于您对MySQL 的喜好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2018-12-28
    • 2018-07-20
    相关资源
    最近更新 更多