修改 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 相同。
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 的最大值 |
|---|---|
| 小于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 |
|---|---|
| 小于16 GiB | 4 |
| 16 – 31 GiB | 12 个月 |
| 32 – 63 GiB | 20 |
| 64 GiB 或更多 | 28 |
pgaudit.log
- 类型:字符串(以逗号分隔的事件类别)
- 默认值:"ddl"
- 是否需要重启:否
待审核的语句类以逗号分隔的列表:
| 类 | 已记录的声明 |
|---|---|
| 读取 | SELECT、COPY FROM |
| 写入 | INSERT、UPDATE、DELETE、TRUNCATE、COPY TO |
| 函数 | 函数调用和 DO 代码块 |
| 角色 | 授予、撤销、角色和权限变更 |
| DDL | 除与角色相关的语句外,所有 DDL 语句 |
| 其他 | DISCARD、FETCH、CHECKPOINT、VACUUM、SET |
| misc_set | 仅限 SET 语句 |
| 全部 | 所有先前的语句类 |
| 无 | 禁用会话审计日志记录 |
在“全量”或“写入忙”实例上运行操作可能会产生大量的日志。
pgaudit.role
- 类型:字符串
- 默认值:""(为空 — 禁用对象级审计日志记录)
- 是否需要重启:否
用于对象级审计日志记录的角色。pgAudit 会记录该角色具有权限的对象上的活动。 在设置此参数之前,该角色必须已存在。