开启或关闭连接池

如果您的业务场景中,短连接较多或需要频繁创建和销毁连接,建议您开启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功能的应用程序,可能需要考虑直接连接到数据库而不使用连接池。

费用

该功能免费。

操作步骤

开启或关闭连接池

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据库连接

  3. 单击开启PgBouncer关闭PgBouncer

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

  5. (可选)开启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

连接池模式,指定客户端在什么情况下可以重用连接。

  • 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"

启动参数,您可以在此参数中指定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:开启

  • false:关闭

true