有关 Rails-Postgres 数据库连接的问题



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

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

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

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

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

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

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

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

最新更新