最近,我开始在高流量时收到 mySQL“连接过多”错误。我的 rails 应用程序在一个共享主机上有 2 个实例的 mongrel 集群上运行。最近的一些变化可能会推动它:
- 我网站的访问量增加了。我现在平均每天大约 4K 页。
- 数据库大小增加了。我最大的表有 ~ 100K 行。在最坏的情况下,一些关联可能会返回数百个实例,尽管大多数情况要少得多。
- 我添加了一些功能,在某些操作中增加了数据库调用的数量和大小。
我已经进行了代码审查,以减少数据库调用、优化 SQL 查询、添加缺失的索引以及使用 :include 进行预加载。但是,我的许多方法仍然会进行 5-10 次单独的 SQL 调用。我的大多数动作的响应时间约为 100 毫秒,但我最常见的动作之一平均为 300-400 毫秒,有些动作随机峰值超过 1000 毫秒。
日志没有什么帮助,因为错误似乎是随机发生的,或者至少该模式似乎与调用的操作或访问的数据无关。
我可以通过添加额外的 mongrel 实例来缓解错误吗?还是 mySQL 连接受服务器限制,因此与我划分流量的进程数无关?
这很可能是我的编码问题,还是我应该按我的主机来增加共享服务器上的容量/减少负载?