我有Unicorn,Sidekiq和Postgres设置。
我正在尝试了解正确的配置,以便我不会达到最大数据库连接限制。在Opsworks中,m1.small Postgres RDS实例最多可以有121个连接。
我的数据库池大小为5。
考虑一下。 Sidekiq和Unicorn是它自己的过程。因此每个进程的数据库池大小为5.如果我的理解错误,请纠正我。
如果我有5个独角兽进程',则表示5 * 5 = 25个数据库连接
现在这是我有点困惑的部分,因为Sidekiq是多线程的。如果Sidekiq的并发度为5.并且db池大小也设置为5.这是否意味着在给定时间内有25个潜在的数据库连接?
这意味着,对于一个实例,我可以有50个db连接?
答案 0 :(得分:18)
在Unicorn中,每个进程都建立自己的连接池,因此,如果您的数据库池设置为5,并且您有5个Unicorn工作程序,则最多可以有25个连接。但是,由于每个独角兽工作者一次只能处理一个连接,因此除非您的应用程序在内部使用线程,否则每个工作人员只会实际使用一个数据库连接。
在Sidekiq中,池中的连接是跨线程共享的,因此每个worker需要至少有一个连接可用。如果你的并发度为5,那么你的池需要至少为5。
如果池大小超过1意味着每个Unicorn工作者都可以访问它无法使用的连接,但它实际上不会打开连接,所以这并不重要。
您的应用所需的实际连接总数,除非您在应用程序代码中使用线程(并且他们不共享数据库连接),每个Sidekiq工作者一个加上每个Unicorn工作者一个。