Postgres configuration
======================

いくつかのPostgres構成パラメーターはPGDノードに影響を与えます。ノードごとにこれらのパラメーターを異なるように設定できますが、一般的にはお勧めしません。

PGD独自の設定については、 :ref:`PGD settings <PGD settings>` を参照してください。

Postgres設定
------------

PGDを正しく実行するには、次のPostgres設定が必要です。

- ``wal_level`` — PGDは論理デコードに依存するため、 ``logical``
  に設定する必要があります。

- ``shared_preload_libraries`` —拡張機能を有効にするには、\ ``bdr``
  を含める必要があります。他のほとんどの拡張機能は、コンマ区切りリストの\ ``bdr``
  エントリーの前後に表示できます。その1つの例外は\ ``pgaudit``
  であり、これはリストの\ ``bdr``
  より前に表示する必要があります。また、このリストには\ ``pglogical``
  を含めないでください。

- ``track_commit_timestamp``
  —競合する各行のタイムスタンプを取得するには、競合を解決するために\ ``on``
  に設定する必要があります。

PGDでは、これらのPostgreSQL設定を適切な値に設定する必要があります。これは、クラスターのサイズとスケールによって異なります。

- ``logical_decoding_work_mem``
  —論理デコードによって使用されるメモリバッファサイズ。このサイズよりも大きいトランザクションはバッファをオーバーフローし、ローカルディスクに一時的に保存されます。デフォルトは64MBですが、かなり高く設定できます。

- ``max_worker_processes`` —
  PGDはレプリケーションとメンテナンスタスクにバックグラウンドワーカーを使用するため、正常に動作するには十分なワーカースロットが必要です。各データベースのワーカーの正しい最小数の式は、次の値を合計することです。

  - PostgreSQLインスタンスごとに1つ
  - そのインスタンスのデータベースごとに1つ
  - PGD対応データベースごとに4つ
  - PGDグループのピアノードごとに1つ
  - ピアノードの数倍(ライターの数bdr.num_writers)プラス1
    ノードがPGDグループから削除されるときに、一時的により多くのワーカープロセスが必要になる場合があります。

- ``max_wal_senders`` —各ピアノードに2つ必要です。

- ``max_replication_slots`` —各ピアノードに2つ必要です。

- ``wal_sender_timeout`` および\ ``wal_receiver_timeout``
  —ノードがCAMOパートナーを切断または再接続したとみなすまでの時間を決定します。詳細は、
  :ref:`CAMO failure scenarios <Commit At Most Once>` を参照してください。

N個のピアノードを持つグループの通常の実行では、PGDにはN個のスロットとWAL送信機が必要です。同期中に、PGDは別のN-1スロットとWALセンダーを一時的に使用するため、この時折のピーク要求に十分な高いパラメーターを設定するように注意してください。

Parallel
applyがオンの場合、スロット数はフォーミュラ*ライターからNスロットに増やす必要があります。これは、
``max_replication_slots`` もレプリケーションオリジンの最大数を設定し、
Parallel
applyの一部の機能はライタごとに追加のオリジンを使用するためです。

:ref:`Decoding worker <Decoding worker>` が有効になっている場合、このプロセスにはPGDグループごとに1つの追加のレプリケーションスロットが必要です。

``max_worker_processes`` 、\ ``max_wal_senders``
、および\ ``max_replication_slots``
パラメーターを変更するには、ローカルノードを再起動する必要があります。

古い同期レプリケーションモードは、次のパラメーターを使用してサポートされています。詳細と制限については、
:ref:`コミットスコープのモニタリング <コミットスコープのモニタリング>` を参照してください。

- ``synchronous_commit`` および\ ``synchronous_standby_names`` —
  PGDレプリケーションの耐久性とパフォーマンスに影響します。
  `physical replication <https://www.postgresql.org/docs/11/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT>`_  と同様の方法。

時間ベースのスナップショット
----------------------------

snapshot_timestamp
^^^^^^^^^^^^^^^^^^

:ref:`Timestamp-based snapshots <Timestamp-based snapshots>` の使用をオンにし、使用するタイムスタンプを設定します。

準備されたトランザクションの最大数
----------------------------------

max_prepared_transactions
^^^^^^^^^^^^^^^^^^^^^^^^^

明示的な2フェーズコミット、
CAMO、またはEagerトランザクションのため、クラスター全体で同時に準備されたトランザクションの最大数に対処するために十分に高く設定する必要があります。制限を超過すると、ノードはローカル2フェーズコミットまたはCAMOトランザクションを実行できず、クラスター上のすべてのEagerトランザクションを防止します。このパラメーターは、Postgresサーバーの起動時にのみ設定できます。
