我们最近遇到了 postgres 连接槽用完的问题,经过大量调试和耸耸肩,我们几乎可以追溯到我们理解连接池错误的事实。
我们使用Rails、Postgres 和Unicorn,以及Delayed Job 假设连接池是特定于进程的,即每个进程都有自己的10 个(我们的连接池限制)连接到池中的数据库,我们是否正确?
如果应用程序中的任何地方都没有线程,我们是否正确地假设每个进程将使用 1 个连接,因为没有人需要第二个连接?
基于这些假设,我们将其追踪到进程的数量
Web 服务器 - 4x 独角兽
延迟作业 3x 服务器 - 30 个进程 = 90 个连接
那是 94 个连接,rails:console
s 的几个连接和几个rails runner
orrake
任务可以解释为什么我们经常达到限制,对吧?ruby
在我将脚本转换为脚本之后,这周尤其频繁rails runner
。
我们计划将最大值从 100 -> 200 或 250 增加以缓解这种情况,但是有没有一种简单的方法可以在 Rails 中实现进程间连接池?