Replication and sequence tuning

Replication and sequence tuning#

地理分散クラスターは、高遅延のネットワークリンクを介して変更をレプリケートするため、レプリケーションのスループットとシーケンスの一意性が単一ロケーションのセットアップよりも重要になります。ノードグループレベルでこれらの設定を構成して、リモートノードに変更を適用する方法と、シーケンスが場所を超えて一意の値を生成する方法を制御します。

パラレル適用#

Parallel Apply により、各ノードは、マルチプルのライタプロセスをシークエンシャルではなく同時に使用して、着信変更を適用できるため、書き込み量が多い場合の適用ラグが削減されます。 bdr.writers_per_subscription がノードごとに2つのライターに設定されている場合、デフォルトで有効になっています。ノードグループレベルでnum_writers を使用して、bdr.max_writers_per_subscription で設定された制限内で、サブグループごとのライター数を設定します。

  1. ロケーションサブグループごとのnum_writers の数を変更することにより、地域分散クラスターのスループットを向上させます。値が高いほどスループットは向上しますが、メモリ使用量が増加します。場所のサブグループごとに繰り返します。

SELECT bdr.alter_node_group_option(
    node_group_name := <location_a>,
    config_key := num_writers,
    config_value := 4
);
  1. 大規模なトランザクションが最初にディスクに書き込まれるのではなく、ライタプロセスに直接送信されるようにstreaming_mode をwriter に設定し、受信ノードのI/Oオーバーヘッドを削減します。

SELECT bdr.alter_node_group_option(
    node_group_name := <location_a>,
    config_key := streaming_mode,
    config_value := writer
);

デフォルトはauto で、PGDは使用可能なリソースに基づいてfile とwriter のいずれかを選択します。書き込み量が一貫して多い地域分散クラスターには、 writer を明示的に設定することをお勧めします。トレードオフは、追加のリソース使用量です。 writer モードでは、大規模なトランザクションごとに専用のライタプロセスが必要です。 file モードでは、 PGDは適用する前に一時ディスクファイルに書き込みます。

streaming_mode = 'writer' は、 Commit At Most Once と互換性がありません。クラスターがCAMOを使用している場合、 streaming_mode をデフォルトのauto のままにします。

遅延を適用する#

サブスクライバ専用のサブグループでapply_delay を使用して遅延リードレプリカを作成し、偶発的なデータ損失または論理的破損に対するリカバリウィンドウを提供します。遅延は、オリジンでのトランザクションの元のコミット時間から測定されます。デフォルトは0s 遅延なしです。

SELECT bdr.alter_node_group_option(
    node_group_name := <delayed_read_replica_group>,
    config_key := apply_delay,
    config_value := 30min
);

注釈

データノードグループまたはトップレベルグループで`apply_delay` を設定しないでください。設定すると、アクティブなクラスターに意図的なレプリケーションラグが発生します。

シークエンス#

標準のPostgresシーケンスは各ノードにローカルであり、複数の場所に同時に書き込むと主キーの競合が発生します。 すべてのノードにわたって一意性を保証するPGDグローバルシーケンスを使用するように地理分散クラスターを構成します。 bdr.default_sequence_kind 構成パラメーターは、新しく作成されたシーケンスとシリアル列に適用されるタイプを制御します。

  • snowflakeid —タイムスタンプベースのアルゴリズムを使用して、ノード間通信なしで一意の値を生成します。 64ビットのbigint またはbigserial 列でのみ動作します。ネットワークパーティションとクロスリージョンのレイテンシーに対する耐性があります。

  • galloc — クラスター全体のカウンターから値の範囲を割り当てます。新しい範囲が必要な場合はクォーラムが必要です。 smallint 、integer 、およびbigint をサポートしますが、クォーラムの可用性の影響を受けます。

  • distributed デフォルト — bigint シーケンスの場合はsnowflakeid を、 smallint およびinteger シーケンスの場合はgalloc を自動的に使用します。

地域分散クラスターの場合、デフォルトのdistributed 設定を使用することをお勧めします。可能な場合、大規模なシーケンスのgalloc のクォーラム依存関係を回避しながら、より小さい整数型をサポートします。

注釈

複数の書き込み場所がある地域分散クラスターでは bdr.default_sequence_kind = local の設定を避けてください。ローカルシーケンスは、クラスター全体の一意性を保証せず、マルチマスターレプリケーションで挿入競合の原因となります。

グローバルシーケンスタイプと動作の詳細については、 Sequences を参照してください。