许多应用程序服务器都集成了连接池,甚至可以配置独立应用程序,以便使用HikariCP,Apache DBCP等。
那么当应用程序已经有连接池时,使用PgBouncer有什么好处呢?
我发现最接近的答案是What are advantages of using transaction pooling with pgbouncer?,它没有提到使用另一个连接池,并提到优势是空闲会话的使用。
我主要使用配置了最小池大小,最大池大小,空闲超时的WildFly ......因此它在不使用时基本上删除了空闲连接(如果它是主要优点)。
这让我觉得PgBouncer不适合这种情况,我只是应该继续使用我的应用服务器连接池。
顺便说一下,在事务池模式下,PgBouncer不能使用命名的预备语句,这些语句看起来不是性能明智的选择。如果有任何优势,那么它是否可以与wildfly连接池一起使用?
答案 0 :(得分:2)
如果您的应用程序服务器包含连接池,并且只有一个应用程序服务器连接到数据库,则最好使用集成连接池。
在这种情况下,pgBouncer只是一个额外的组件,会使架构变得更加复杂,并且您将拥有应用程序服务器和pgBouncer之间所有连接的额外开销。
如果有多个应用程序服务器连接到同一个数据库,问题就不再那么简单了。如果只有两个或三个应用程序服务器,那么没有pgBouncer就可以正常生活。
连接到数据库服务器的应用程序服务器越多,您将拥有的数据库连接就越多,这就会使数据库面临风险:如果这些连接中有太多同时变得繁忙,那么您的数据库性能和响应时间将会下降,因为数据库超载。 在这种情况下,pgBouncer将通过限制与数据库的活动连接数来提供帮助。