Heroku Postgres在Rails 3上的连接

时间:2018-08-29 20:09:09

标签: ruby-on-rails postgresql heroku

开始阅读它,但不确定我是否完全理解与Postgres的连接在Rails中如何工作。我最多有5个Web dynos,每个Web dynos运行5个进程(独角兽),因此最多可以有25个连接,然后通过delay_job最多可以有50个工人dynos,所以应该是75。

但是,当工作队列增加并且我正在运行所有50个工作dynos时,似乎我达到了Postgres连接限制128,并且我想那不可能很好。

Web dynos是否可以在每个进程中打开多个连接?工人可以照做吗?

如果与池数据库设置有关,那么对于Unicorn,是每个工作进程或每个dyno连接池?这似乎对我来说还不清楚(根据对Corey的评论),尽管似乎对每个Unicorn worker进程来说都是如此。

有没有一种方法可以设置delay_job worker dynos池设置?我猜这也是默认值5。

任何好的资源或解决方案将非常有帮助。似乎PGbouncer是一个选项,或者将池从默认的5设置为较低的值,例如1或2。

编辑:我错误地将NewRelic日志读取为每个事务的毫秒数,但是该类别的总毫秒数,因此它不会减慢Postgres的速度,但是达到连接限制仍然不理想。 < / p>

1 个答案:

答案 0 :(得分:0)

尽管有GIL,单个Rails实例仍可以使用线程处理多个传入请求,因此默认配置是打开与数据库的多个连接(每个线程一个),并使用连接池管理对它们的访问。默认情况下,Rails配置为在该池中最多维护5个连接,但是您可以根据需要调整大小。

通常我会在答案中提供此信息,但是要考虑很多因素,因此,我将提供指向您应查看的两个文档的链接:

  1. Concurrency and Database Connections in Ruby with ActiveRecord
  2. Deploying Rails Applications with Unicorn

最后,我将为您提供一些来之不易的建议:沟纹独角兽和DelayedJob赞成Puma和Sidekiq 。 Puma + Sidekiq都是多线程的,并且在开发时会考虑性能。 Puma是Rails 5中的默认应用程序服务器,Heroku也建议使用它。 Sidekiq是Ruby社区中事实上的后台作业处理库,并得到了广泛的支持和商业支持。