最近,我开始在流量高的时候遇到MySQL“太多连接”错误。我的Rails应用程序在一个共享主机上有2个实例的杂种群集运行。最近可能会推动它的一些变化:

  • 我网站的流量增加了。我现在平均每天约4K页。
  • 数据库大小增加了。我最大的桌子有〜100k行。在最坏的情况下,一些协会可能会返回数百个实例,尽管大多数案例要少得多。
  • 我添加了一些功能,这些功能增加了一些操作中数据库调用的数量和大小。

我已经进行了代码审核,以减少数据库调用,优化SQL查询,添加丢失索引并使用:包括急切的加载。但是,我的许多方法仍然会进行5-10个单独的SQL调用。我的大多数动作的响应时间约为100ms,但我最常见的动作平均为300-400ms,并且某些动作在1000毫秒以上随机达到峰值。

日志几乎没有帮助,因为错误似乎是随机发生的,或者至少该模式与所调用的操作或所访问的数据无关。

我可以通过添加其他杂种实例来减轻错误吗?还是MySQL连接受服务器限制,因此与我对流量分配的流程数量无关?

这很可能是我的编码问题,还是我应该按主机在共享服务器上增加容量/更少的负载?

有帮助吗?

解决方案

你在缓存吗?这是减轻应用程序和数据库负载的重要组成部分。这 铁轨指南有一个有关缓存的部分.

其他提示

ActivereCord自Rails 2.2起就汇总了数据库连接,这很可能是导致您在此处进行多余连接的原因。尝试拒绝的价值 pool 在你的 database.yml 对于该环境(默认为5)。

可以找到文档 这里.

有问题。一个杂种实例一次处理1个请求,因此,如果您有2个杂种实例,那么您不应看到超过2个活动的mySQL连接(至少来自杂种)

您可以随着时间的推移记录或绘制显示状态的输出,例如“ threads_connected”。

PS:这不是很多杂种。如果您想能够同时提供2个以上的请求,那么您将需要更多。 ...如果内存很紧,您可以切换到phusion乘客和REE。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top