高度缓存系统的Activerecord连接池优化

时间:2016-06-29 02:35:59

标签: mysql ruby-on-rails amazon-web-services activerecord amazon-rds

我有一个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,即使应用程序甚至不进行任何数据库调用。

0 个答案:

没有答案