我有一个rails activerecord项目,已经扩展到每分钟大约60-100k请求。我们使用AWS,它需要大约5个xlarge c4 ec2实例来满足这么多请求。我们优化了系统,以便从redis缓存中提供99.99%的请求,使我们的mysql数据库几乎不被使用。
这很好,除了我们一直在运行mysql的连接限制。亚马逊RDS显然限制了我们可以拥有的连接数量,并且仅仅因为我们可以拥有更多的休眠连接而愚蠢地增加我们的RDS实例大小。我们实际上分析了RDS服务器,它可能每天获得10-50个查询,具体取决于我们更新系统的次数。
有没有办法让activerecord连接池不保留连接?
我们尝试简单地降低连接池,这有助于降低连接,但后来我们开始了:
(ActiveRecord :: ConnectionTimeoutError)"无法在5秒内获得数据库连接
我想要实现的是rails项目停止尝试预分配连接,只在必要时才打开。我在rails框架和activerecord中不够精通,无法理解系统如何保留连接以及为什么我们得到ConnectionTimeoutErrors,即使应用程序甚至不进行任何数据库调用。