【问题标题】:Slow https requests after sudden spike in mysql queriesmysql 查询突然激增后 https 请求缓慢
【发布时间】:2017-01-16 00:44:19
【问题描述】:

我的 wordpress 网站在 VPS 服务器上运行,每秒处理大约 150 个 mysql 查询。

有时,当我们注意到每秒大约 200 个 mysql 查询的流量激增时,对站点的 https 请求非常慢。

该网站使用 http 加载不错,但使用 https 需要 20 多秒。

在达到峰值后的一个小时内,加载时间逐渐变好,然后又恢复正常。

服务器负载和内存看起来不错。 mysql 查询、防火墙流量和 eth0 请求只有一个峰值。没有mysql慢查询

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 凌晨 4 点到 6 点闻起来像 DOS 攻击。
  • long_query_time 的值是多少? Set 明显较低,因此您可以捕获一些“慢查询”。在您的高峰期间,某些“慢查询”可能会出现高峰。
  • 目前是 10 秒,我会减少这个,看看它是否捕获更多。谢谢

标签: mysql wordpress performance ssl https


【解决方案1】:

我认为您的答案在“磁盘延迟”和“磁盘利用率”图表中。

MySQL 在小负载下运行良好,因为它可以缓存它需要的所有数据。但是当您的结果或查询变得太大,或者您请求太多时,它将开始执行许多磁盘 I/O 操作。这使您能够处理巨大的负载和非常大的数据,但是当您超出 MySQL 分配的内存时,您将需要读取所有内容并将其写入磁盘。

如果您在本地 SSD 驱动器上运行,这不会那么糟糕。但从设备名称中,我看到您在 EBS 卷上运行,这不是真正的硬盘驱动器。它是网络驱动器,因此所有流量都会使您的网络连接过载。

您有多种选择:

1.) 安装mysqltuner,让服务器运行一段时间,然后运行它,看看它的提示。我的猜测是,它会建议您增加 MySQL 内存池、减少并行连接数或重组查询。

2.) 使用具有实际本地存储(例如 m3 或 r3)的 EC2 实例类型并写入本地 SSD。您可以在多个 SSD 驱动器上进行 RAID 以使其更快。

3.) 使用 EBS 优化实例(专用 EBS 网络带宽)和正确的卷类型(某些 EBS 卷类型具有 I/O 积分,类似于 t 型实例的 CPU 积分,当您运行这些时,您的操作会减速爬行)。

【讨论】:

  • 感谢 grepe 选项,现在网络速度变慢的原因是有道理的。我今天一直在深入研究这个问题。整个数据库只有40mb左右。服务器上有 8GB 内存。我认为有一些优化要做。我刚刚发现所有表都是 myisam 类型,所以我正在查看 key_buffer_size 设置。我需要将它们转换为 innodb,但我不确定我是否可以安全地即时执行此操作。
  • MySQL 内存池很棘手。它为每个并行连接分配固定数量的内存,所以当你创建太多的内存时,即使你的实际数据很小并且你有很多 RAM,你也会用完内存。这完全取决于您的配置。
  • Memory tips 用于 MyISAM 和 InnoDB。 key_buffer 仅用于索引。 Conversion to InnoDB tips buffer_pool 用于数据和索引。
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-13
  • 2012-05-04
  • 2012-01-15
相关资源
最近更新 更多