如果您的业务场景中,短连接较多或需要频繁创建和销毁连接,建议您开启RDS PostgreSQL的连接池功能,该功能可以帮助您有效降低频繁创建和销毁连接对实例性能的影响,控制数据库服务器的负载和资源使用。
背景
PgBouncer是一个开源的数据库连接池,专为PostgreSQL数据库而设计。它充当应用程序和数据库之间的中间层,负责管理数据库连接并提供连接池功能。
PgBouncer的主要目标是优化数据库连接的性能和资源利用率。当应用程序需要与PostgreSQL数据库建立连接时,它可以通过连接池复用现有的数据库连接,避免了频繁地创建和销毁连接产生的性能开销。这种连接复用可以显著减少数据库服务器的负载,提高应用程序的响应速度和并发性能。
应用场景
适用于短连接较多,频繁创建和销毁连接的场景。
PgBouncer可以限制最大客户端连接数和最大空闲时间等。有助于控制数据库服务器的负载和资源使用情况,防止恶意或不合理的查询连接过度占用系统资源。
前提条件
RDS PostgreSQL实例需满足以下要求:
-
实例大版本为PostgreSQL 11或以上。
-
实例内核小版本为20230530或以上。
说明-
查看或升级内核小版本请参见 升级内核小版本 。
-
暂不支持Babelfish for RDS PostgreSQL实例开启PgBouncer。
-
暂不支持RDS PostgreSQL Serverless实例开启PgBouncer。
-
影响
-
开启PgBouncer默认会分配新端口6432,不会与原端口5432冲突,原5432端口的直连连接不受影响。
-
开启PgBouncer前或开启PgBouncer后,如果开通SSL链路加密(服务端SSL加密或客户端SSL加密),则PgBouncer也会同步开启服务端SSL或客户端SSL,但PgBouncer不支持访问控制ACL (Access Control List)配置为verify-ca或verify-full的连接验证,也不支持在证书到期前,配置 客户端证书吊销文件 。
注意事项
-
关闭PgBouncer后,将无法再使用PgBouncer端口连接实例,请在业务程序中将连接端口修改为实例原端口(默认为5432)。
-
PgBouncer虽然是一个强大的工具,但并不适用于所有情况。在某些特定的应用场景下,例如具有复杂事务、需要数据库连接状态跟踪或需要使用特定PostgreSQL功能的应用程序,可能需要考虑直接连接到数据库而不使用连接池。
费用
该功能免费。
操作步骤
开启或关闭连接池
- 访问 RDS实例列表 ,在上方选择地域,然后单击目标实例ID。
-
在左侧导航栏单击 数据库连接 。
-
单击 开启PgBouncer 或 关闭PgBouncer 。
-
在弹出的对话框中,单击确定。
-
(可选)开启PgBouncer后,即可在 数据库连接 页面查看PgBouncer端口,默认为 6432 。您可以单击 修改连接地址 ,在 修改连接地址 窗口中,选择对应地址类型后,修改PgBouncer端口。
通过连接池连接RDS PostgreSQL实例
开启PgBouncer后,如果需要通过连接池连接RDS PostgreSQL实例,则需要在连接RDS PostgreSQL实例时,将连接端口替换为PgBouncer端口(默认为6432)即可。如何连接RDS PostgreSQL实例,请参见 连接PostgreSQL实例 。
修改连接池参数
开启PgBouncer后,支持通过 参数设置 功能,修改PgBouncer的相关参数,调整连接池配置(如控制最大客户端连接数)。如何修改RDS PostgreSQL实例参数,请参见 设置实例参数 。
您也可以在系统参数模板中查看 PostgreSQL_PgBouncer_默认参数模板(rpg-sys-pgsql-pgbouncer) ,了解更多PgBouncer相关参数信息。查看方法,请参见 查看参数模板 。
-
开启PgBouncer后才能通过 参数设置 功能查看和修改PgBouncer参数,关闭PgBouncer后, 参数设置 中将不显示PgBouncer参数。
-
如果您想要通过参数模板来批量修改参数,则必须先开启PgBouncer,然后再将参数模板应用到RDS PostgreSQL实例。
-
连接池的最大空闲时间默认为10分钟,暂不支持修改。
支持修改的参数及相关说明如下:
参数名 |
参数类型 |
默认值 |
描述 |
pgbouncer.pool_mode |
string |
transaction |
连接池模式,指定客户端在什么情况下可以重用连接。
|
pgbouncer.default_pool_size |
int |
20 |
连接池默认允许连接数。 |
pgbouncer.max_client_conn |
int |
100 |
连接池允许的最大客户端连接数。 |
pgbouncer.min_pool_size |
int |
0 |
连接池允许的最小客户端连接数。 |
pgbouncer.query_wait_timeout |
int |
120 |
允许查询等待执行的最长时间。单位:秒。 如果在此期间未将查询分配给服务器,则客户端将断开连接。 如果配置为0,则表示禁用。此时客户端将无限期排队。 |
pgbouncer.ignore_startup_parameters |
string |
"extra_float_digits" |
启动参数,您可以在此参数中指定PgBouncer启动跟踪参数,使用英文逗号(,)分隔。
重要
该参数默认值为 extra_float_digits ,建议您在修改时不要删除此默认值,因为使用PostgreSQL JDBC连接实例时需要在此参数中包含 extra_float_digits 。 |
pgbouncer.stats_users |
string |
"" |
允许连接到PgBouncer虚拟库上运行只读查询的数据库用户,使用英文逗号(,)分隔。 |
上述参数的更多解释,请参见 PgBouncer官方文档 。
查看连接池相关监控指标
RDS PostgreSQL支持通过 增强监控 功能,查看PgBouncer的相关监控指标。增强监控的更多信息,请参见 查看增强监控 。
-
为了更便捷地获取PgBouncer的监控信息,开启PgBouncer后,RDS PostgreSQL将自动在postgres库下安装pgbouncer_fdw和dblink插件,该插件暂不支持卸载。
-
只有开启连接池功能后,才可以在增强监控中查看连接池的相关监控指标。
PgBouncer监控指标如下:
指标 |
含义 |
db.pgbouncer.client_connections.active |
客户端活跃连接数。 |
db.pgbouncer.client_connections.waiting |
客户端等待连接数。 |
db.pgbouncer.server_connections.active |
服务端活跃连接数。 |
db.pgbouncer.server_connections.idle |
服务端空闲连接数。 |
db.pgbouncer.total_pooled_connections |
连接池总连接数。 |
db.pgbouncer.num_pools |
连接池数量。 |
相关OpenAPI
您可以调用 ModifyDBInstanceConfig 接口为RDS PostgreSQL实例开启或关闭PgBouncer功能。需要配置的参数如下:
参数 |
说明 |
示例值 |
DBInstanceId |
待开启或关闭PgBouncer功能的RDS PostgreSQL实例ID。 |
pgm-**** |
ConfigName |
配置项名称。 |
pgbouncer |
ConfigValue |
配置项取值。
|
true |