ruby-on-rails - 关于 Rails-Postgres 数据库连接的问题

标签 ruby-on-rails ruby postgresql database-connection connection-pooling

我们最近遇到了 postgres 连接槽不足的问题,经过大量调试和耸耸肩后,我们几乎可以追溯到我们对连接池的理解错误的事实。

我们使用 Rails、Postgres 和 Unicorn 以及延迟作业 我们是否正确地假设连接池是特定于进程的,即每个进程都有自己的 10 个(我们的连接池限制)到池中数据库的连接?

如果应用程序中的任何位置都没有线程,我们是否正确地假设每个进程在大多数情况下将使用 1 个连接,因为没有人需要第二个连接?

根据这些假设,我们追踪到进程数量

网络服务器 - 4x unicorn
延迟作业 3x 服务器 - 30 个进程 = 90 个连接

这是 94 个连接,还有几个 rails:console 连接和几个 rails runnerrake 任务,这可以解释为什么我们我们经常达到极限吗?本周,在我将 ruby 脚本转换为 rails runner 脚本后,这种情况尤其频繁。

我们计划将最大值从 100 增加到 200 或 250 以缓解这个问题,但是有没有一种简单的方法可以在 Rails 中实现进程间连接池?

最佳答案

您可能想看看 pgbouncer 。它是一个专门构建的 PostgreSQL 连接池。有一些notes on the wiki也。它也适用于大多数 Linux 发行版。

关于ruby-on-rails - 关于 Rails-Postgres 数据库连接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923803/

相关文章:

ruby-on-rails - Rails 作业和 Sidekiq

ruby - roo gem 无法工作(NameError : uninitialized constant Excel)

ruby - 为什么即使未执行该代码路径,Ruby 似乎也会从 case 语句内部提升变量声明?

postgresql - 在 PostgreSQL 中抑制重复的列值?

postgresql - 将 Postgres 主键类型从 varchar 更改为 uuid 并被其他表引用

ruby-on-rails - rails : Scoped ID in addition to primary id

ruby-on-rails - Ruby on Rails 3 + Rspec + capybara : check response status

ruby - Ruby 中 map 和 collect 的区别?

postgresql - 调整两列与一组整数的比较

ruby-on-rails - 多部分电子邮件的 Markdown 为文本/纯文本和文本/html