PostgreSQL の設定を変更する

第2世代

IBM Cloud® Databases for PostgreSQL Gen 2 では、プロビジョニング時および稼働中のインスタンスに対して、API または CLI を使用してデータベースパラメータを設定できます。 パラメータによっては、 ローリング再起動 (各ノードを1台ずつ順次再起動)が必要なものもあれば、ダウンタイムなしで即座に適用されるものもあります。

カスタムパラメータを使用して新しいインスタンスをプロビジョニングする

設定したいパラメータのみを含めてください。

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
  • 再起動が必要 :いいえ

指定された継続時間(ms)を超えるログ出力ステートメントを記録します。 無効にするには -1 に設定し、すべてのステートメントをログに記録するには0に設定します。

トランザクションあたりの最大ロック数

  • :整数
  • デフォルト: 64
  • 範囲 :10 ~ 1,024
  • 再起動が必要 :はい

トランザクションごとに利用可能なオブジェクトロックの平均数。

max_prepared_transactions

  • :整数
  • デフォルト: 0
  • 範囲 :0 ~ 500
  • 再起動が必要 :はい

「準備済み」状態での最大トランザクション数。 2フェーズコミットを無効にするには、0(デフォルト)に設定してください。 アプリケーションで PREPARE TRANSACTION を使用する場合にのみ、0 以外の値に設定してください。 有効にした場合は、この値を max_connections と同じ値に設定してください。

shared_buffers

  • :整数(8 kB ブロック)
  • デフォルト :ホスト・フレーバーのRAMの約25%
  • 範囲 :RAMの約25%~約40%
  • 再起動が必要 :はい

共有メモリプールのサイズは、8つの kB ブロックで構成されます。1つの GiB = 131,072ブロックです。 このプラットフォームでは、デフォルトでホストRAMの約25%が割り当てられ、上限は約40%となっています。 インフラストラクチャのスケール調整が行われると、その値は自動的に調整されます。

wal_level

  • : enum
  • デフォルト: 論理値
  • 有効な値 :replica、logical
  • 再起動が必要 :はい

WALの詳細度を制御します。「logical」は論理レプリケーションとCDCをサポートし、「replica」は物理レプリケーションのみをサポートします。

「論理」から「レプリカ」への変更を行うと、既存の論理レプリケーションスロットが使用できなくなる可能性があります。 この値を変更する前に、CDC または論理レプリケーションのワークロードが実行されていないことを確認してください。

max_wal_senders

  • :整数
  • デフォルト: 10
  • 範囲 :10 ~ 40
  • 再起動が必要 :はい

同時に実行できるWAL送信プロセスの最大数。 各論理レプリケーションのサブスクライバーおよび物理スタンバイには、1つの送信者が必要です。

max_replication_slots

  • :整数
  • デフォルト: 10
  • 範囲 :10 ~ 40
  • 再起動が必要 :はい

最大レプリケーションスロット数。 論理レプリケーションのサブスクライバー1つにつき、1つのスロットが必要です。 使用されていないスロットは速やかに削除してください。放置されたスロットはWALを保持したままとなり、ディスク容量を消費してしまう可能性があります。 max_wal_senders >= max_replication_slots の条件を満たす必要があります。

max_worker_processes

  • :整数
  • デフォルト: 8
  • 最低人数 :8人
  • 最大 :メモリ階層型。ホストのRAM構成に応じて、8、16、24、または32
  • 再起動が必要 :はい

論理レプリケーションおよびその他のバックグラウンドタスクで共有される、バックグラウンドワーカーの総予算。

max_worker_processes は RAM によって制限されます
ホスト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ブロック
役割 GRANT、REVOKE、ロールおよび権限の変更
DDL ロールに関連するステートメントを除くすべてのDDL
その他 DISCARD、FETCH、CHECKPOINT、VACUUM、SET
misc_set SET文のみ
すべて これまでのすべてのステートメントクラス
なし セッション監査ログの記録を無効にします

「all」を使用したり、ビジー状態のインスタンスに書き込みを行ったりすると、ログの量が多くなる可能性があります。

pgaudit.role

  • : 文字列
  • デフォルト: "" (空 — オブジェクトレベルの監査ログ記録が無効)
  • 再起動が必要 :いいえ

オブジェクトレベルの監査ログ記録に使用されるロールです。 pgAudit は、このロールが権限を持つオブジェクトに対する操作をログに記録します。 このパラメータを設定する前に、そのロールが存在している必要があります。