我应该在database.yml中考虑我的池大小?

时间:2014-01-30 23:03:54

标签: ruby-on-rails database postgresql ruby-on-rails-4

我一直在考虑设置适当的池大小(在database.yml中)。

我在what is the use of the pool option in database.yml看到了类似的问题,但需要进一步了解这一点。

这是我的设置。我有运行Unicorn的实例有5个工作进程'。我也有Sidekiq实例,并发设置为5(我正在为5个并发线程设置)。

我的游泳池大小应该考虑什么?我应该考虑哪些其他因素?

这是我迄今为止的理解(引自我之前发言的工程师):

  

假设你将它保留为默认值5.它只是意味着,在“a   单个进程“,池大小为5.池是   每个过程。它不是系统范围的,所以值为5则不然   意味着你只限于5个进程,它只意味着每个   进程有自己的池,大小为5。

总结,每个实例的数据库池大小为5.这也意味着数据库池大小设置不是应用程序范围,而是每个进程/实例。这也意味着,因为Sidekiq和Unicorn将在自己的实例中运行。它将拥有自己的db池大小为5.这个假设是正确的吗?

此时,我可以假设默认池大小为5通常是安全的。你的想法?

PS。如果您可以共享AWS RDS实例的池大小。这将是值得赞赏的。

1 个答案:

答案 0 :(得分:2)

您在database.yml中的池大小应不小于sidekiq / unicorn进程的最大数量(不是总和)。例如,如果运行5个进程的unicorn和以15个并发方式开始的sidekiq,则应设置15个池大小。或者,如果unicorn为7,sidekiq为5,则在database.yml中需要7个连接。