本页介绍了如何在 AlloyDB for PostgreSQL 中启用、连接和监控托管连接池。托管式连接池是一种设计模式,可通过维护一组预建立的连接来优化数据库连接管理。然后,应用会重复使用此连接池,而不是为每项数据库操作打开和关闭连接,从而提高性能和资源利用率。
借助托管式连接池,您可以通过优化 AlloyDB 实例的资源使用情况和连接延迟时间来扩缩数据库工作负载。托管式连接池会尽可能使用池化和多路复用功能,将服务器连接动态分配给传入请求。这种方法通过吸收突然的连接高峰并重复使用现有的数据库连接,可以提升性能,尤其是对于规模扩大的连接。使用托管式连接池时,应用会连接到连接池,而不是连接到特定数据库,这可缩短连接时间并提高读取工作负载的可伸缩性。
虽然您可以对任何事务工作负载使用托管式连接池,但托管式连接池最适合包含更多短时连接的应用,或可能会出现连接激增的应用。
准备工作
您必须使用直接连接方式连接到实例。托管式连接池不支持与 AlloyDB Auth Proxy 或 AlloyDB 语言连接器建立连接。
所需的角色
如需获得启用和使用托管连接池所需的权限,请让您的管理员为您授予 AlloyDB 实例的 Cloud AlloyDB Admin (roles/alloydb.admin
) IAM 角色。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
此预定义角色包含启用和使用托管式连接池所需的
权限。
alloydb.instances.update
高级配置选项
AlloyDB 托管式连接池支持以下高级连接池配置选项。您可以使用这些配置选项来自定义托管连接池,以满足实例的需求。您可以使用 Google Cloud 控制台、gcloud CLI 或 AlloyDB API 在实例一级设置这些配置。
配置名称 | 说明 |
---|---|
连接模式 ( connection-pooling-pool-mode )
|
对于连接模式,您可以选择事务(默认)或会话。
事务 ( transaction ):
在事务级别池化连接。在事务期间,系统会将服务器连接分配给客户端。事务完成后,服务器连接会放回池中。 会话 ( session ):
在会话级别池化连接。在客户端保持连接的整个时间里,系统都会向其分配一个服务器连接。客户端断开连接后,服务器连接会放回池中。 |
池大小上限 ( connection-pooling-max-pool-size )
|
连接池的大小上限。默认值为 50 个连接。 |
最小池大小 ( connection-pooling-min-pool-size )
|
连接池的最小大小。默认值为 0 个连接。 |
空闲客户端连接超时(秒) ( connection-pooling-client-connection-idle-timeout )
|
客户端连接在超时之前保持空闲状态的时间。此值的范围为 0 到 2,147,483 秒,默认值为 0 秒。您只能使用 Google Cloud 控制台配置此参数。 |
空闲服务器连接超时(秒) ( connection-pooling-server-connection-idle-timeout )
|
服务器连接在超时之前保持空闲状态的时间。此值的范围为 0 到 2,147,483 秒,默认值为 600 秒。 |
查询等待超时(秒) ( connection-pooling-query-wait-timeout )
|
查询等待超时的时间。此值的范围为 0 到 2,147,483 秒,默认值为 120 秒。 |
预处理语句数上限 ( connection-pooling-max-prepared-statements )
|
在事务共享模式下发送的预处理语句命令的数量上限。默认值为 0。 |
忽略启动参数 ( connection-pooling-ignore-startup-parameters )
|
您希望忽略的参数,这些参数默认不会在启动数据包中跟踪。 |
服务器生命周期(秒) ( connection-pooling-server-lifetime )
|
服务器连接在被托管连接池关闭之前的最大空闲时长。默认值为 3600 秒。您只能使用 Google Cloud 控制台配置此参数。 |
默认情况下,托管式连接池会发起与 AlloyDB 服务器的连接。建立并对客户端连接进行身份验证后,托管式连接池可能会创建一个或多个服务器连接,以便池的大小与所选配置相匹配。然后,系统会为客户端连接分配一个可用的服务器连接。系统会维持服务器连接,直到明确关闭连接或连接空闲时间超过空闲服务器连接超时期限。
启用托管式连接池
您可以为任何现有实例或新实例启用托管连接池。
为新的主实例启用
如需创建启用了托管连接池的新主实例,请参阅创建主实例。您可以使用 Google Cloud 控制台、Google Cloud CLI 或 AlloyDB API 为实例启用托管式连接池。
为新读取池实例启用
如需创建启用了托管连接池的新读取池实例,请参阅创建读取池实例。您可以使用 Google Cloud 控制台、Google Cloud CLI 或 AlloyDB API 为实例启用托管式连接池。
为现有实例启用
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 AlloyDB API 为现有实例启用托管式连接池。
控制台
gcloud
如需为现有主或读取池实例启用托管式连接池,请使用以下 gcloud alpha alloydb instances update
命令:
gcloud alpha alloydb instances update INSTANCE_ID \
--project=PROJECT_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--enable-connection-pooling
替换以下内容:
INSTANCE_ID
:您要为其启用托管连接池的 AlloyDB 实例的 ID。PROJECT_ID
:项目的 ID。REGION_ID
:区域的 ID。CLUSTER_ID
:集群的 ID。
启用托管式连接池后,您可以通过设置高级配置选项来自定义托管式连接池选项,以满足实例的需求。如需详细了解如何设置配置选项,请参阅修改实例的托管连接池。
REST
如需为现有主或读取池实例启用托管式连接池,请使用以下命令并设置 connectionPoolConfig
:
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:项目的 ID。LOCATION_ID
:集群所在的区域的 ID。CLUSTER_ID
:集群的 ID。必须以小写字母开头,可以包含小写字母、数字和连字符。INSTANCE_ID
:实例的 ID。
HTTP 方法和网址:
PATCH https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID
请求 JSON 正文:
{
"connectionPoolConfig": {
"enabled": true
}
}
连接到托管式连接池
连接到托管式连接池与直接数据库连接完全相同,只是端口不同。托管式连接池侦听端口 6432。添加到 AlloyDB 实例的任何用户都可以使用托管连接池连接。
使用内置身份验证进行连接
该命令示例使用内置身份验证将 AlloyDB 实例连接到托管连接池。
psql postgresql://USERNAME:PASSWORD@IP_ADDRESS:6432/postgres
使用 SSL 连接
实例 SSL 模式也适用于与托管连接池的任何连接。默认情况下,仅接受 SSL 连接。如需允许不加密的连接,请使用以下 gcloud alloydb instances update
命令将实例 SSL 模式设置为 ALLOW_UNENCRYPTED_AND_ENCRYPTED
。
gcloud alloydb instances update INSTANCE_ID \
--project=PROJECT_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--ssl-mode=ALLOW_UNENCRYPTED_AND_ENCRYPTED
修改实例的托管式连接池
启用托管式连接池后,您可以使用高级配置选项自定义托管式连接池选项,以满足实例的需求。这些配置选项称为“托管连接池标志”。如需详细了解配置选项、默认值和范围,请参阅高级配置选项。
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 AlloyDB API 修改现有实例的托管连接池配置选项。
控制台
前往集群页面。
点击资源名称列中的某个集群。
在概览页面中,前往集群中的实例。
点击要修改的实例对应的修改实例或修改读取池。
在托管式连接池下,展开高级池化选项。
修改要更新的高级共享选项。您可以修改以下选项:
- 连接模式
- 池大小上限
- 池大小下限
- 客户端连接数上限
- 空闲客户端连接超时(秒)
- 空闲服务器连接超时(秒)
- 查询等待超时(秒)
- 预处理语句数上限
- 忽略启动参数
- 服务器生命周期(秒)
点击更新实例。
gcloud
如需修改现有实例的托管连接池配置选项,请使用以下 gcloud alpha alloydb instances update
命令:
gcloud alpha alloydb instances update INSTANCE_ID \
--project=PROJECT_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
{ \
--connection-pooling-pool-mode=CONNECTION_MODE \
| --connection-pooling-max-pool-size=MAX_POOL_SIZE \
| --connection-pooling-min-pool-size=MIN_POOL_SIZE \
| --connection-pooling-max-client-connections=MAX_CLIENT_CONNECTION \
| --connection-pooling-server-idle-timeout=SERVER_IDLE_TIMEOUT_PERIOD \
| --connection-pooling-query-wait-timeout=QUERY_WAIT_TIMEOUT_PERIOD \
| --connection-pooling-ignore-startup-parameters=IGNORE_STARTUP_PARAMETERS \
}
替换以下内容:
INSTANCE_ID
:您要为其停用托管连接池的 AlloyDB 实例的名称。PROJECT_ID
:项目的 ID。REGION_ID
:区域的 ID。CLUSTER_ID
:集群的 ID。您可以配置以下选项:
--connection-pooling-pool-mode
。此值必须为session
或transaction
。--connection-pooling-max-pool-size
--connection-pooling-min-pool-size
--connection-pooling-max-client-connections
--connection-pooling-server-idle-timeout
--connection-pooling-query-wait-timeout
--connection-pooling-ignore-startup-parameters
REST
如需修改现有读取池实例的托管连接池配置选项,请使用以下命令并设置 connectionPoolConfig
:
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:项目的 ID。LOCATION_ID
:集群所在的区域的 ID。CLUSTER_ID
:您创建的集群的 ID。必须以小写字母开头,可以包含小写字母、数字和连字符。INSTANCE_ID
:您创建的实例的 ID。您可以配置以下选项:
POOL_MODE
。此值必须为session
或transaction
。MAX_POOL_SIZE
MIN_POOL_SIZE
MAX_CLIENT_CONNECTION
SERVER_IDLE_TIMEOUT
QUERY_WAIT_TIMEOUT
IGNORE_STARTUP_PARAMETERS
HTTP 方法和网址:
PATCH https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID
请求 JSON 正文:
{
"connectionPoolConfig": {
"enabled": true,
"flags": {
"pool_mode": "POOL_MODE",
"max_pool_size": "MAX_POOL_SIZE",
"min_pool_size": "MIN_POOL_SIZE",
"max_client_connection": "MAX_CLIENT_CONNECTION",
"server_idle_timeout": "SERVER_IDLE_TIMEOUT",
"query_wait_timeout": "QUERY_WAIT_TIMEOUT",
"ignore_startup_parameters": "IGNORE_STARTUP_PARAMETERS"
},
}
}
查看实例的托管式连接池状态
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 AlloyDB API 查看实例的托管连接池的状态。
控制台
前往集群页面。
点击资源名称列中的某个集群。
在概览页面中,找到您要查看其托管连接池状态的实例。托管式连接池字段显示其是处于启用还是停用状态。
gcloud
如需查看现有实例的托管连接池的状态,请使用以下 gcloud alpha alloydb instances describe
命令:
gcloud alpha alloydb instances describe INSTANCE_ID \
--project=PROJECT_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--format="value(connectionPoolConfig.enabled)"
替换以下内容:
INSTANCE_ID
:您要修改其托管连接池选项的 AlloyDB 实例的名称。PROJECT_ID
:项目的 ID。REGION_ID
:区域的 ID。CLUSTER_ID
:集群的 ID。
如果启用了托管式连接池,则会返回以下响应:
True
REST
如需查看 AlloyDB 实例的托管连接池的状态,请使用以下命令并查找 connectionPoolConfig
:
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:项目的 ID。LOCATION_ID
:集群所在的区域的 ID。CLUSTER_ID
:您创建的集群的 ID。必须以小写字母开头,可以包含小写字母、数字和连字符。INSTANCE_ID
:您创建的实例的 ID。
HTTP 方法和网址:
GET https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID
为现有实例停用托管式连接池
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 AlloyDB API 为现有实例停用托管连接池。
控制台
前往集群页面。
点击资源名称列中的某个集群。
在概览页面中,前往集群中的实例。
针对您要停用托管式连接池连接的实例,点击修改实例或修改读取池。
在托管式连接池下,取消选中启用托管式连接池对应的复选框。
点击更新实例。
gcloud
如需为现有实例停用托管连接池,请使用以下 gcloud alpha alloydb instances update
命令:
gcloud alpha alloydb instances update INSTANCE_ID \
--project=PROJECT_ID \
--region=REGION_ID \
--cluster=CLUSTER_ID \
--no-enable-connection-pooling
替换以下内容:
INSTANCE_ID
:您要为其停用托管连接池的 AlloyDB 实例的名称。PROJECT_ID
:项目的 ID。REGION_ID
:区域的 ID。CLUSTER_ID
:集群的 ID。
REST
如需为现有读取池实例停用托管式连接池,请使用以下命令并将 connectionPoolConfig
设置为 false
:
在使用任何请求数据之前,请先进行以下替换:
PROJECT_ID
:项目的 ID。LOCATION_ID
:集群所在的区域的 ID。CLUSTER_ID
:您创建的集群的 ID。必须以小写字母开头,可以包含小写字母、数字和连字符。INSTANCE_ID
:您创建的实例的 ID。
HTTP 方法和网址:
PATCH https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION_ID/clusters/CLUSTER_ID/instances/INSTANCE_ID
请求 JSON 正文:
{
"connectionPoolConfig": {
"enabled": false
}
}
监控托管式连接池
AlloyDB 提供了以下指标,可帮助您监控托管连接池在实例上的运行方式。您可以使用 Metrics Explorer 查看这些指标。
指标名称 | 说明 |
---|---|
连接池数量/database/conn_pool/num_pools |
每个数据库的连接池总数。 |
客户端连接/database/conn_pool/client_connections |
跟踪按每个数据库的客户端连接状态分组的客户端连接数。此指标包含的状态包括:
|
服务器连接/database/conn_pool/server_connections |
跟踪按每个数据库的服务器连接状态分组的服务器连接数。此指标包含的状态包括:
|
平均等待时间/database/conn_pool/client_connections_avg_wait_time |
每个数据库中,所有客户端在等待服务器状态下的平均时间(以微秒为单位)。 |
如需了解详情,请参阅 AlloyDB 指标。
限制
在预览版发布期间,存在以下限制,这些限制可能会在正式版发布后或之后发生变化或被移除:
- 托管式连接池不支持与 AlloyDB Auth Proxy 或 AlloyDB 语言连接器建立连接。
- 如果您在事务共享模式下使用托管连接池,则不支持以下 SQL 功能:
SET/RESET
LISTEN
WITH HOLD CURSOR
PREPARE/DEALLOCATE
PRESERVE/DELETE ROW
临时表LOAD
- 会话级建议锁
- 协议级准备好的计划