修改 PostgreSQL 配置

第2代

在 IBM Cloud® Databases for PostgreSQL Gen 2中,您可以在配置时以及在运行中的实例上,通过API或CLI配置数据库参数。 某些参数需要分批重启 (各节点依次重启);而其他参数则可立即生效,且不会造成停机。

使用自定义参数创建新实例

请仅包含您想要设置的参数。

使用 CLI 进行配置

ibmcloud resource service-instance-create <INSTANCE_NAME> databases-for-postgresql <SERVICE_PLAN_NAME> <REGION> \
  -p '{
    "dataservices": {
      "postgresql": {
        "configuration": {
          "max_connections": 300,
          "log_connections": true,
          "log_disconnections": true,
          "log_min_duration_statement": 500,
          "max_locks_per_transaction": 128,
          "max_prepared_transactions": 50,
          "wal_level": "logical",
          "shared_buffers": 196608,
          "max_worker_processes": 16,
          "max_logical_replication_workers": 8,
          "max_wal_senders": 20,
          "max_replication_slots": 20,
          "pgaudit.log": "ddl,role,read",
          "pgaudit.role": "auditor"
        }
      }
    }
  }'

使用 API 进行配置

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H "Authorization: Bearer $IBMCLOUD_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "<INSTANCE_NAME>",
    "resource_plan_id": "<SERVICE_PLAN_ID>",
    "resource_group": "<RESOURCE_GROUP_ID>",
    "target": "<REGION>",
    "parameters": {
      "dataservices": {
        "postgresql": {
          "configuration": {
            "max_connections": 300,
            "log_connections": true,
            "log_disconnections": true,
            "log_min_duration_statement": 500,
            "max_locks_per_transaction": 128,
            "max_prepared_transactions": 50,
            "wal_level": "logical",
            "shared_buffers": 196608,
            "max_worker_processes": 16,
            "max_logical_replication_workers": 8,
            "max_wal_senders": 20,
            "max_replication_slots": 20,
            "pgaudit.log": "ddl,role,read",
            "pgaudit.role": "auditor"
          }
        }
      }
    }
  }'

在运行中的实例上更新参数

仅包含您想要更改的参数;其余参数保持不变。 无效的参数值将被拒绝,并返回 4xx 错误。

使用 CLI 来更新

ibmcloud resource service-instance-update <INSTANCE_NAME_OR_CRN> \
  -p '{
    "dataservices": {
      "postgresql": {
        "configuration": {
          "max_connections": 300,
          "log_connections": true,
          "log_disconnections": true,
          "log_min_duration_statement": 500,
          "max_locks_per_transaction": 128,
          "max_prepared_transactions": 50,
          "wal_level": "logical",
          "shared_buffers": 196608,
          "max_worker_processes": 16,
          "max_logical_replication_workers": 8,
          "max_wal_senders": 20,
          "max_replication_slots": 20,
          "pgaudit.log": "ddl,role,read",
          "pgaudit.role": "auditor"
        }
      }
    }
  }'

使用 API 进行更新

curl -X PATCH \
  https://resource-controller.cloud.ibm.com/v2/resource_instances/<INSTANCE_ID> \
  -H "Authorization: Bearer $IBMCLOUD_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "dataservices": {
        "postgresql": {
          "configuration": {
            "max_connections": 300,
            "log_connections": true,
            "log_disconnections": true,
            "log_min_duration_statement": 500,
            "max_locks_per_transaction": 128,
            "max_prepared_transactions": 50,
            "wal_level": "logical",
            "shared_buffers": 196608,
            "max_worker_processes": 16,
            "max_logical_replication_workers": 8,
            "max_wal_senders": 20,
            "max_replication_slots": 20,
            "pgaudit.log": "ddl,role,read",
            "pgaudit.role": "auditor"
          }
        }
      }
    }
  }'

配置 PostgreSQL 参数

max_connections

  • 类型:整数
  • 默认值:115
  • 范围:25 – 500
  • 需要重启:是

最大并发客户端连接数。 默认值 115 会预留 15 个连接用于平台监控;剩余 100 个连接可用于客户端工作负载。

log_connections

  • 类型:布尔型
  • 默认值:false
  • 是否需要重启:否

记录每次成功的连接,这对于合规性审计追踪(例如 SOC 2 或 PCI DSS)非常有用。

log_disconnections

  • 类型:布尔型
  • 默认值:false
  • 是否需要重启:否

在断开连接时记录每次会话,包括会话时长。

log_min_duration_statement

  • 类型:整数(毫秒)
  • 默认值:100
  • 范围:-1 – 3,600,000
  • 是否需要重启:否

记录超过指定时长(毫秒)的语句。 设置为 -1 以禁用该功能,设置为0以记录所有语句。

max_locks_per_transaction

  • 类型:整数
  • 默认值:64
  • 范围:10 – 1,024
  • 需要重启:是

每个事务可用的对象锁平均数量。

max_prepared_transactions

  • 类型:整数
  • 默认值:0
  • 范围:0 – 500
  • 需要重启:是

处于“已准备就绪”状态时的最大事务数。 将该值设为 0(默认值)以禁用两阶段提交。 仅当您的应用程序使用 PREPARE TRANSACTION 时,才将其设置为非零值。 启用此功能后,请将此值设置为与 max_connections 相同。

shared_buffers

  • 类型:整数(8个 kB 数据块)
  • 默认值:约占主机配置内存的 25%
  • 范围:约25% RAM – 约40% RAM
  • 需要重启:是

共享内存池的大小以 8 个 kB 块为单位。1 个 GiB = 131,072 个块。 该平台将默认值设置为主机内存的约25%,上限为约40%。 当基础设施进行扩展时,该值会自动调整。

wal_level

  • 类型:枚举
  • 默认值:逻辑型
  • 有效值:副本、逻辑
  • 需要重启:是

控制 WAL 的详细程度。logical 支持逻辑复制和 CDC;replica 仅支持物理复制。

将逻辑副本降级为副本可能会导致现有的逻辑复制槽无法使用。 在更改此值之前,请确保没有正在运行的 CDC 或逻辑复制工作负载。

max_wal_senders

  • 类型:整数
  • 默认值:10
  • 范围:10 – 40
  • 需要重启:是

最大并发 WAL 发送进程数。 每个逻辑复制订阅者和物理备用服务器都需要一个发送方。

max_replication_slots

  • 类型:整数
  • 默认值:10
  • 范围:10 – 40
  • 需要重启:是

最大复制槽数。 每个逻辑复制订阅者都需要一个槽位。 请及时释放未使用的槽位,因为被废弃的槽位会保留 WAL,从而可能耗尽磁盘空间。 必须满足 max_wal_senders >= max_replication_slots。

max_worker_processes

  • 类型:整数
  • 默认值:8
  • 最低:8
  • 最大值:分层内存。根据主机型号的内存规格,分别为 8、16、24 或 32
  • 需要重启:是

后台进程的总预算,由逻辑复制和其他后台任务共享。

max_worker_processes 受内存限制
主机内存 max_worker_processes 的最大值
小于16 GiB 8
16 – 31 GiB 16
32 – 63 GiB 24
64 GiB 或更多 32

必须满足 max_worker_processes >= max_logical_replication_workers + 4。

max_logical_replication_workers

  • 类型:整数
  • 默认值:4
  • 最低:4
  • 最大值:分层内存 — 4、12、20 或 28,具体取决于主机型号的 RAM
  • 需要重启:是

可用于逻辑复制的 worker。 最大值为 max_worker_processes 层级 - 4:

max_logical_replication_workers 受内存限制
主机内存 最大值 max_logical_replication_workers
小于16 GiB 4
16 – 31 GiB 12 个月
32 – 63 GiB 20
64 GiB 或更多 28

pgaudit.log

  • 类型:字符串(以逗号分隔的事件类别)
  • 默认值:"ddl"
  • 是否需要重启:否

待审核的语句类以逗号分隔的列表:

pgaudit.log 事件类
已记录的声明
读取 SELECT、COPY FROM
写入 INSERT、UPDATE、DELETE、TRUNCATE、COPY TO
函数 函数调用和 DO 代码块
角色 授予、撤销、角色和权限变更
DDL 除与角色相关的语句外,所有 DDL 语句
其他 DISCARD、FETCH、CHECKPOINT、VACUUM、SET
misc_set 仅限 SET 语句
全部 所有先前的语句类
禁用会话审计日志记录

在“全量”或“写入忙”实例上运行操作可能会产生大量的日志。

pgaudit.role

  • 类型:字符串
  • 默认值:""(为空 — 禁用对象级审计日志记录)
  • 是否需要重启:否

用于对象级审计日志记录的角色。pgAudit 会记录该角色具有权限的对象上的活动。 在设置此参数之前,该角色必须已存在。