开启或关闭连接池(PgBouncer)

如果您的业务场景中存在大量短连接或需要频繁创建和销毁连接,建议开启RDS PostgreSQL连接池功能。该功能通过复用数据库连接,能够显著降低此类连接对实例性能的影响,并帮助您更好地控制数据库服务器的负载和资源消耗。

功能简介

RDS PostgreSQL的连接池功能基于开源组件PgBouncer实现。它作为应用程序和数据库之间的中间件,负责管理和复用数据库连接。

  • 连接复用:连接池优先尝试复用现有连接,从而避免了频繁创建和销毁连接带来的性能开销,显著降低数据库服务器的负载,并提升应用的响应速度与并发处理能力。

  • 资源控制:通过连接池可以限制最大客户端连接数和最大空闲时间等,有效防止过多连接占用系统资源。

前提条件

RDS PostgreSQL实例需满足以下要求:

  • 实例大版本为PostgreSQL 11或以上。

  • 产品系列为基础系列和高可用系列。

  • 计费方式为包年包月或按量计费。

  • 实例内核小版本为20240830或以上,且后缀不带babelfish

    说明

    查看或升级内核小版本请参见升级内核小版本

计费说明

该功能免费。

注意事项

  • 开启PgBouncer会分配新的PgBouncer端口(默认为6432),原数据库端口(默认为5432)的直连访问不受影响。关闭PgBouncer后,将无法再通过PgBouncer端口访问实例,请确保业务程序已将连接端口改回实例原数据库端口。

  • 开启PgBouncer后,系统自动在postgres库下安装pgbouncer_fdwdblink插件以支持查看连接池监控指标,这些插件暂不支持卸载。

  • 为实例开通SSL链路加密时,PgBouncer也会同步开启SSL,但不支持将访问控制(ACL,Access Control List)配置为verify-caverify-full的连接验证,也不支持通过客户端证书吊销文件

  • 对于包含复杂事务、需要跟踪数据库连接状态或使用特定PostgreSQL功能的应用程序,建议直接连接数据库,而非使用PgBouncer。

  • 连接池的最大空闲时间默认为10分钟,超过此时长的空闲连接将被关闭。此值当前不支持修改。

操作步骤

开启或关闭连接池

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击数据库连接

  3. 单击开启PgBouncer关闭PgBouncer

  4. 在弹出的对话框中,单击确定

  5. 开启后,在数据库连接页面可以查看PgBouncer端口(默认为6432)。

    您可以通过单击修改连接地址,在修改连接地址窗口中,选择对应地址类型后,修改PgBouncer端口

通过连接池连接RDS PostgreSQL实例

开启PgBouncer后,在应用程序或客户端中连接实例时,将连接端口替换为PgBouncer端口(默认为6432)即可。其他连接参数(如地址、用户名、密码)保持不变,详细的连接方法请参见连接PostgreSQL实例

修改连接池参数

开启PgBouncer后,支持通过参数设置功能,修改PgBouncer的相关参数,调整连接池配置(如控制最大客户端连接数)。

  • 开启PgBouncer后才能通过参数设置功能查看和修改PgBouncer参数。

  • 如果想要通过参数模板来批量修改参数,则必须先开启PgBouncer,然后再将参数模板应用到RDS PostgreSQL实例。

    默认参数模板为:PostgreSQL_PgBouncer_默认参数模板(rpg-sys-pgsql-pgbouncer)。

支持修改的参数及相关说明如下:

参数名

参数类型

默认值

描述

pgbouncer.pool_mode

string

transaction

连接池模式。

  • session:会话结束时回收连接。

  • transaction:事务结束时回收连接。

  • statement:查询语句执行完后回收连接。

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"

需要连接池忽略的额外参数,多个参数使用英文逗号(,)分隔。

连接池默认仅处理核心参数(client_encoding、datestyle、timezone、standard_conforming_strings),其他参数将导致连接拒绝。如需支持额外参数,请在此处列出,连接池将自动忽略这些参数,以确保连接成功。

重要

添加其他参数时,建议保留extra_float_digits,以兼容PostgreSQL JDBC连接。

pgbouncer.stats_users

string

""

允许连接到连接池虚拟库并执行只读查询的用户列表,多个用户用英文逗号(,)分隔。

更多参数说明请参见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

连接池数量。

相关API

您可以调用ModifyDBInstanceConfig接口为RDS PostgreSQL实例开启或关闭PgBouncer功能。需要配置的参数如下:

参数

说明

示例值

DBInstanceId

待开启或关闭PgBouncer功能的RDS PostgreSQL实例ID。

pgm-****

ConfigName

配置项名称。

pgbouncer

ConfigValue

配置项取值。

  • true:开启

  • false:关闭

true