我们最近遇到了 postgres 连接槽不足的问题,经过大量调试和耸耸肩后,我们几乎可以追溯到我们对连接池的理解错误的事实。
我们使用 Rails、Postgres 和 Unicorn 以及延迟作业 我们是否正确地假设连接池是特定于进程的,即每个进程都有自己的 10 个(我们的连接池限制)到池中数据库的连接?
如果应用程序中的任何位置都没有线程,我们是否正确地假设每个进程在大多数情况下将使用 1 个连接,因为没有人需要第二个连接?
根据这些假设,我们追踪到进程数量
网络服务器 - 4x unicorn
延迟作业 3x 服务器 - 30 个进程 = 90 个连接
这是 94 个连接,还有几个 rails:console
连接和几个 rails runner
或 rake
任务,这可以解释为什么我们我们经常达到极限吗?本周,在我将 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/