本页介绍了什么是托管式连接池,以及如何使用它来优化 Cloud SQL 实例的数据库连接管理。
借助托管式连接池,您可以使用池来优化 Cloud SQL 实例的资源用量和连接延迟时间,从而扩缩工作负载。 托管式连接池会尽可能动态地为传入请求分配服务器连接。此方法可处理连接突然激增情况,并重复使用现有的数据库连接,从而显著提高性能,尤其是对于规模扩大的连接。托管式连接池会连接到池程序集群,而不是连接到特定数据库,从而缩短连接时间并提高工作负载的可伸缩性。
每个池都与唯一的数据库和用户相关联。客户端通过身份验证后,连接池会尝试重用池中的某个空闲服务器连接,以将数据库连接到服务器。如果服务器连接不可用,则在池中创建一个新的服务器连接以连接数据库。使用的池化器数量取决于实例的 vCPU 核心数。
虽然您可以对任何事务型工作负载使用托管式连接池,但它最能为包含短期有效的连接的应用或会导致连接激增的应用带来吞吐量和延迟时间方面的优势。
对于长期连接,使用托管式连接池的连接性能可能略低于使用直接连接时的性能。在这种情况下,当连接数非常高时,托管式连接池可提供连接伸缩功能。不过,对于通常建立长期连接的应用,您可能需要避免使用连接池。
您可以使用 Identity and Access Management 来保护连接,具体取决于端口。如需详细了解 IAM 在 Cloud SQL 中的运作方式及其限制,请参阅 IAM 身份验证。
如需详细了解如何启用托管式连接池,请参阅配置托管式连接池。
要求
如需使用托管式连接池,您的实例必须满足以下要求:
- 您的实例必须是 Cloud SQL 企业 Plus 版实例。
- 您必须仅使用直接连接或 Cloud SQL Auth 代理连接到实例。
- 您的实例必须设置为使用专用服务访问通道、使用公共 IP,或者是一个启用了 Private Service Connect 的新实例。
- 您的实例必须使用新的 Cloud SQL 网络架构。
- 托管式连接池需要最低维护版本号
POSTGRES_$version.R20250727.00_14
。如需详细了解如何执行自助维护,请参阅执行自助维护。
Cloud SQL 实例的托管式连接池使用的端口
启用托管式连接池后,Cloud SQL 实例用于处理数据库流量的端口会发生变化。您可以根据端口使用 Identity and Access Management 来保护连接。
托管式连接池使用的端口及其可用的 IAM 选项如下所示:
TCP 端口 5432:由 Postgres 数据库服务器用于直接连接。这是使用 psql 客户端直接连接的默认端口号。
TCP 端口 6432:由托管式连接池服务器用于直接连接。如需使用此端口进行连接,请在使用 psql 客户端直接连接时指定
psql -p 6432
。使用此端口时,您可以采用任何 IAM 身份验证选项。
TCP 端口 3307:由受管理的连接池服务器用于仅限 Cloud SQL Auth 代理的连接。当您使用 Cloud SQL Auth 代理连接到受管连接池时,此端口号会通过 Cloud SQL Auth 代理客户端进行配置,并且无法更改。
您可以使用任何 IAM 身份验证选项,也可以使用此端口进行自动 IAM 数据库身份验证。
合乘选项
借助托管式连接池,您可以使用 pool_mode
参数管理连接的池化方式。您可以使用以下池化选项:
transaction
(默认):在事务级层池连接。 每次事务完成后,连接都会返回到池中。 Cloud SQL 建议为短期连接使用transaction
池模式。session
:会话级层的池连接。每个会话都使用一个专用服务器连接来维护会话状态。这会降低池化效率。当客户端断开连接时,服务器会返回到连接池。
高级配置选项
您可以使用以下配置选项自定义托管式连接池:
配置名称 | 说明 |
---|---|
max_pool_size
|
每个连接池中允许的数据库和用户对的服务器连接数上限。默认值为 50 个连接。 |
min_pool_size
|
每个连接池中随时可用的服务器连接数下限。
如果服务器连接数小于 min_pool_size ,则此设置会向池中添加更多服务器连接。这有助于管理在不活动一段时间后数据库负载的突然增加,并确保连接可用且随时可以使用。
默认值为 0 个连接。 |
max_client_connections
|
使用托管式连接池时,实例允许的最大连接数。默认值为 5,000 个连接。 |
max_prepared_statements
|
在 transaction 池模式下支持的协议级命名预处理语句数上限。
将此选项设置为 0 会停用预处理语句支持。为获得最佳性能,此值应大于数据库中常用的预处理语句的数量。托管式连接池中的预处理语句数量过多可能会导致内存使用量增加。 默认值为 0 个语句。 |
client_connection_idle_timeout
|
客户端连接在超时前保持空闲状态的时间。该值的范围可介于 0 到 2,147,483 秒之间,默认值为 0 秒。 |
server_connection_idle_timeout
|
服务器连接在超时前保持空闲状态的时间。该值的范围可介于 0 到 2,147,483 秒之间,默认值为 600 秒。 |
query_wait_timeout
|
查询在连接池中等待服务器连接的时间,超过此时间后查询会超时。
将此选项设置为 0 可将其停用,从而允许无限期的客户端排队。启用此选项可防止无响应的服务器阻止连接。 该值的范围可介于 0 到 2,147,483 秒之间,默认值为 120 秒。 |
ignore_startup_parameters
|
您要忽略的参数,默认情况下,系统不会在托管式连接池启动数据包中跟踪这些参数。 |
server_lifetime
|
在托管式连接池关闭服务器连接之前,该连接未使用的时长上限。如果该值设置为 0 秒,则连接会在使用后立即关闭。
默认值为 3,600 秒。 |
限制
将托管式连接池与 Cloud SQL 企业 Plus 版实例搭配使用时,请注意以下限制:
- 在现有实例上启用托管式连接池会导致数据库重启。
- 当您使用 Cloud SQL API 启用、停用或配置托管式连接池时,
instance.update
API 不能包含任何其他实例配置更新。 - 托管连接池只能与 Cloud SQL Auth 代理版本 2.15.2 及更高版本搭配使用。
- 如果您使用的是 Cloud SQL Go 语言连接器,建议您使用最低版本为
1.24
的 Go。如果您使用的是 Go 1.23 版或更早版本,那么在使用托管式连接池时,性能可能会受到限制。 如果您在
transaction
池模式下使用托管式连接池,则不支持以下 SQL 功能:SET/RESET
LISTEN
WITH HOLD CURSOR
PREPARE/DEALLOCATE
PRESERVE/DELETE ROW
临时表LOAD
- 会话级咨询锁
如果您使用的是 asyncpg 数据库接口库,并且在端口 3307 和 6432 上使用托管式连接池 pooler,则必须将
max_prepared_statements
更新为大于 0 的值,才能在托管式连接池 pooler 中启用对预处理语句的支持。如果您使用的是 Cloud SQL for PostgreSQL 版本 17,则不支持
sslnegotiation=direct
选项。托管式连接池不支持客户端 IP 跟踪。如果您在查询数据洞见中启用存储客户端 IP 地址,则客户端 IP 地址会显示为
local
,而不是 IP 地址本身。如果您的实例使用的是 Cloud SQL Auth 代理且已启用受管连接池,则不支持手动 IAM 数据库身份验证。您只能使用自动 IAM 身份验证。
托管式连接池使用的服务器连接
max_connections
数据库配置限制了托管式连接池中的池化器可以使用的服务器连接数上限。Cloud SQL 建议根据实例的工作负载要求和数据库实例大小调整此值。在高峰负载期间,用于身份验证的连接数可能会非常高。
如果您在实例上使用默认的 50 个池 (max_pool_size
),那么在为数据库设置 max_connections
标志时,建议为托管式连接池预留至少 15 个服务器连接(每个 CPU)。如需详细了解 max_connections
标志,请参阅并发连接数上限。
如需修改实例的 max_connections
标志,请参阅配置数据库标志。