配置托管式连接池

本面介绍了如何在 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 为现有实例启用托管式连接池。

控制台

  1. 前往集群页面。

    转到集群

  2. 资源名称列中点击相应集群。

  3. 概览页面中,前往集群中的实例

  4. 点击修改主实例修改读取池

  5. 托管式连接池下,勾选启用托管式连接池对应的复选框。

  6. 可选:如需配置托管式连接池选项,请点击高级池选项

    您可以自定义托管式连接池选项,以满足实例的需求。如需了解详情,请参阅高级配置选项

  7. 点击保存更改

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 为现有实例修改托管式连接池配置选项。

控制台

  1. 前往集群页面。

    转到集群

  2. 资源名称列中点击相应集群。

  3. 概览页面中,前往集群中的实例

  4. 点击您要修改的实例对应的修改实例修改读取池

  5. 托管式连接池下,展开高级池选项

  6. 修改您要更新的高级池选项。您可以修改以下选项:

    • 连接模式
    • 池大小上限
    • 池大小下限
    • 客户端连接数上限
    • 空闲客户端连接超时(秒)
    • 空闲服务器连接超时(秒)
    • 查询等待超时(秒)
    • 预处理语句数上限
    • 忽略启动参数
    • 服务器生命周期(秒)
  7. 点击更新实例

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。此选项必须是 sessiontransaction 之一。
    • --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。此选项必须是 sessiontransaction 之一。
    • 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 查看实例的托管式连接池的状态。

控制台

  1. 前往集群页面。

    转到集群

  2. 资源名称列中点击相应集群。

  3. 概览页面中,找到您要查看其托管式连接池的状态的实例。托管式连接池字段显示其处于启用状态还是处于停用状态。

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 为现有实例停用托管式连接池。

控制台

  1. 前往集群页面。

    转到集群

  2. 资源名称列中点击相应集群。

  3. 概览页面中,前往集群中的实例

  4. 点击您要为其停用托管式池连接的实例对应的修改实例修改读取池

  5. 托管式连接池下,清除启用托管式连接池对应的复选框。

  6. 点击更新实例

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
跟踪按每个数据库的客户端连接状态分组的客户端连接数。此指标包含的状态如下:
  • active:每个数据库的活跃连接数,包括没有任何待处理查询请求的空闲客户端。
  • waiting:每个数据库等待服务器连接的客户端的数量。
服务器连接

/database/conn_pool/server_connections
跟踪按每个数据库的服务器连接状态分组的服务器连接数。此指标包含的状态如下:
  • active:每个数据库的活跃连接数。
  • idle:每个数据库的空闲服务器连接数。
平均等待时间

/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
    • 会话级咨询锁
    • 协议级准备好的方案