MySQL“太多的连接”错误受杂货数量的影响?
-
24-10-2019 - |
题
最近,我开始在流量高的时候遇到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。
不隶属于 StackOverflow