使用PgBouncer时,我可以/应该禁用Ruby On Rails数据库连接池吗



我可以完全禁用RubyonRails连接池吗?

考虑到PgBouncer已经处理数据库连接池,这可以吗?

否。

PgBouncer将自己作为Postgres服务器向客户端进行广告,然后管理与实际Postgres server的连接。除了PgBouncer,我们不需要再深入了解任何细节——从Rails的角度来看,PgBounce实例Postgres服务器,所以让我们解释为什么从那里开始。

在Rails中,并发性需要考虑两个主要因素:可以向其web服务器发出的入站客户端请求的数量和数据库连接池的大小。

如果连接池大小为1,那么应用程序实际上是单线程的:每次发出必须进行数据库查询的入站客户端请求时,该请求都必须从池中签出到数据库的连接。当池大小为1并且并发入站请求数大于1时,第一个请求之后的每个请求都必须挂起,同时第一个请求完成查询并返回到池的连接。如果第一个请求需要很长时间才能完成,那么在等待池中的可用连接时,后续请求可能会超时。

因此,从Rails方面来看,您希望有一个大小大于1的连接池,以允许并发。如果你将其设置为1的大小,那么如何配置PgBouncer并不重要;Rails将始终最多与数据库建立一个连接,并且所有线程都必须共享该连接。

您可以在ActiveRecord::ConnectionAdapters::ConnectionPool < Object上阅读有关Rails中连接池的更多信息。

最新更新