變更您的 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 以記錄所有語句。

每筆交易的最大鎖定數

  • 類型:整數
  • 預設值: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

  • 類型:enum
  • 預設值:邏輯型
  • 有效值:副本、邏輯
  • 是否需要重新啟動:是

控制 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
  • 最大值:採用記憶體分層架構。視主機型號的 RAM 規格而定,可為 8、16、24 或 32
  • 是否需要重新啟動:是

背景工作程序的總預算,此預算將分配給邏輯複製及其他背景任務。

max_worker_processes 受記憶體限制
主機 RAM 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
  • 最大值:記憶體分層 — 視主機型號的 RAM 而定,可選 4、12、20 或 28
  • 是否需要重新啟動:是

可用於邏輯複製的工作程序。 最大值為 max_worker_processes 層級 - 4:

max_logical_replication_workers 受 RAM 容量限制
主機 RAM 最大值 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 會記錄此角色具有權限之物件上的活動。 在設定此參數之前,該角色必須已存在。