如果您的业务场景中,短连接较多或需要频繁创建和销毁连接,建议您开启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 |