2

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

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

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

基于这些假设,我们将其追踪到进程的数量

Web 服务器 - 4x 独角兽
延迟作业 3x 服务器 - 30 个进程 = 90 个连接

那是 94 个连接,rails:consoles 的几个连接和几个rails runnerorrake任务可以解释为什么我们经常达到限制,对吧?ruby在我将脚本转换为脚本之后,这周尤其频繁rails runner

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

4

1 回答 1

2

您可能想看看pgbouncer。这是一个专门构建的 PostgreSQL 连接池。wiki 上也有一些注释。它也为大多数 linux 发行版打包。

于 2013-11-12T09:11:32.210 回答