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