PostgreSQL Configuration for BDR

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

BDRのPostgreSQL設定

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

  • wal_level- BDRはロジカルデコーディングに依存するため、logicalに設定する必要があります。

  • shared_preload_libraries-pglogical,bdrを(このオーダーで)含める必要があります。 ただし、必要に応じて、前後に他のエントリを含めることもできます。

  • track_commit_timestamp-競合を解決するには、「on」に設定する必要があります 競合する行のタイムスタンプを取得します。

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

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

  • max_worker_processes- BDRはレプリケーションにバックグラウンドワーカーを使用します メンテナンスタスクが必要なため、十分なワーカースロットが必要です。 正しく動作します。ワーカーの正しい最小数の式は次のとおりです。 PostgreSQLインスタンスごとに1つ+そのインスタンスのデータベースごとに1つ+ 4 BDR対応データベースBDRノードの同等なごとに1つ+それぞれに1つ データベースごとに、 BDRグループの同等なごとにライタが有効になりノード。 ノードの実行中に、追加のワーカープロセスが一時的に必要になる場合があります BDRグループから削除されました。 ノードすべての同等なごとに2つ必要です。

  • max_replication_slots-max_wal_sendersと同じ。

  • wal_sender_timeoutおよびwal_receiver_timeout-方法の決定 オリジンはすぐにCAMOパートナーを切断されたと見なします 再接続; CAMO Failure Scenariosを参照 詳細。

N個の同等なを持つグループの通常の実行では、 BDRにはN個のスロットとWALセンダが必要になることに注意してください。同期中、 BDRはanotherN-1スロットとWALセンダを一時的に使用するため、この時々のピーク需要に対応するために上記のパラメータを十分に高く設定するよう注意してください。

並列適用をオンにすると、スロットの数を上記の式 *ライターからNスロットに増やすニーズがあります。これは、max_replication_slotsがレプリケーション起点の最大数も設定し、パラレルアプライの機能の一部がライタごとに余分なオリジンを使用するためです。

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

単一のデータベースを使用する4ノードBDRグループの一般に安全な推奨値は、max_replication_slotsおよびmax_worker_processesを50およびmax_wal_sendersに少なくとも10に設定することです。

また、これらのパラメーターを変更するには、ローカルノード:max_worker_processes、max_wal_senders、max_replication_slotsを再起動する必要があることに注意してください。

アプリケーションでは、これらのパラメーターを設定することもできます。詳細については、[耐久性とパフォーマンスオプション]の章を参照してください。

  • synchronous_commit- BDRレプリケーションの耐久性とパフォーマンスに影響します physical replicationと同様の方法で。

  • synchronous_standby_names-上記と同じ

BDRの2ndQPostgres / EDB Postgres拡張設定

次のPostgres設定は、最大2回のコミット(CAMO)で考慮する必要があります。これは、2ndQPostgresとのBDRの組み合わせでのみ使用可能な機能です。これらのいくつかは、2ndQPostgresでのみ利用可能です。他のコミュニティバージョンには既に存在しますが、CAMOと組み合わせてBDRにのみ関連するようになります。

  • synchronous_replication_availability-オプションでasyncにできます オリジンの継続を許可することで可用性を高め、 CAMOパートナーが切断された後にコミットします。デフォルトでは waitの値、オリジンは無期限に待機し、 CAMOパートナーが再接続して送信した後にのみコミットする 確認。

  • snapshot_timestamp-の使用をオンにします timestamp-based snapshotsを使用して、使用するタイムスタンプを設定します。

BDRのpglogical設定

BDRは、内部でpglogicalを使用して基本的なレプリケーションを実装するため、pglogical設定の一部の影響も受けます。

  • pglogical.track_subscription_apply-の適用統計を追跡 各サブスクリプション。

  • pglogical.track_relation_apply-それぞれの適用統計を追跡 リレーションの

  • pglogical.track_apply_lock_timing-追跡時の追跡ロックタイミング リレーションの統計。

  • pglogical.standby_slot_names-物理的スタンバイノードを使用する場合 フェイルオーバーを目的とするため、レプリケーションに設定する必要があります 対象となる各スタンバイのスロット。

  • pglogical.writers_per_subscription-デフォルトのライターあたりの数 サブスクリプション( BDRでは、これも変更できます グループの場合はbdr.alter_node_group_config)。

  • pglogical.max_writers_per_subscription-ライターの最大数 サブスクリプションごと(上記の設定の上限を設定)。

BDR固有の設定

また、設定可能なBDR固有の構成設定もあります。特に明記しない限り、値は任意のユーザがいつでも設定できます。

競合処理

  • bdr.default_conflict_detection-デフォルトの競合検出メソッドを設定します 新しく作成されたテーブルの場合。と同じ値を受け入れます bdr.alter_table_conflict_detection()

グローバルシークエンスパラメータ

  • bdr.default_sequence_kind-デフォルトのsequence kindを設定します。

DDL処理

  • bdr.default_replica_identity-REPLICA IDENTITYのデフォルト値を設定します 新しく作成されたテーブル。 REPLICA IDENTITYは、どの情報が 更新または削除された行を識別するために、ログ先行書き込みに書き込まれます。

    • 受け入れられる値は次のとおりです。

    • -DEFAULT-プライマリキーの列の古い値があれば、それを記録します(これはデフォルトのPostgreSQLの動作です)。 -FULL-行のすべての列の古い値を記録します。 -NOTHING-古い行に関する情報を記録しません。

    • 詳細については、PostgreSQL documentationを参照してください。

    • BDRは、テーブル固有の構成またはbdr.default_replica_identityを介して、テーブルのレプリカアイデンティティがFULLでない限り、PRIMARY KEYまたはUNIQUE制約のないテーブルでUPDATEsおよびDELETEsを複製できません。

    • bdr.default_replica_identityがDEFAULTであり、テーブルにUNIQUE制約がある場合、REPLICA    IDENTITYとして自動的に選択されません。テーブルの作成時に、または上記の文書で説明されているように、後で明示的に設定ニーズがあります。

    • テーブルのレプリカアイデンティティをFULLに設定すると、書き込まれるWALのボリュームと、テーブルのワイヤ上で複製されるデータの量が増加します。

  • bdr.ddl_replication-ノード間でDDLを自動的に複製します(デフォルト 「オン」)。

    • このパラメータは、bdr_superuserロールまたはスーパーユーザロールによってのみ設定できます。

    • bdr.ddl_replication = offを使用してDDLを実行するか、 BDR管理関数を呼び出すと、管理者が介入できるまでレプリケーションが停止する状況が発生する可能性があります。詳細については、the DDL replication chapterを参照してください。

    • bdr.ddl_replicationがoffに設定されると、LOGレベルのログメッセージがPostgreSQLサーバーログに出力されます。さらに、この設定により、キャプチャされたDDLコマンドまたはBDRレプリケーション機能のレプリケーションがスキップされたされるたびに、WARNING-levelメッセージが書き込まれます。

  • bdr.role_replication-ノード間でROLEコマンドを自動的に複製します (デフォルトは「オン」)。このパラメータは、スーパーユーザのみが設定可能です。この設定 bdr.ddl_replicationもオンになっている場合にのみ機能します。

    • 外部メソッドを使用せずにこれをオフにして、保証のノード間でロールを同期させると、管理者が介入するまで複製DDLがレプリケーションを中断する可能性があります。

    • 詳細については、Role manipulation statements in the DDL replication chapterを参照してください。

  • bdr.ddl_locking- DDLのグローバルロックのオペレーションモードを構成します。

    • このパラメータは、bdr_superuserロールまたはスーパーユーザロールによってのみ設定できます。

    • 可能なオプションは次のとおりです。

    • -オフ-DDL操作にグローバルロックを使用しない-オン-すべてのDDL操作にグローバルロックを使用するDDLリレーションのグローバルDMLロックを取得して書き込みを防止する必要があるDDL操作にのみグローバルロックを使用する

    • bdr.ddl_replicationがoffに設定されると、LOGレベルのログメッセージがPostgreSQLサーバーログに出力されます。さらに、この設定が原因でグローバルロック手順がスキップされたされるたびに、WARNINGメッセージが書き込まれます。一部のステートメントでは、2つのWARNINGが発生するのが正常です。1つはDMLロックをスキップし、もう1つはDDLロックをスキップします。

  • bdr.truncate_locking-デフォルトではFalse、この構成オプションは TRUNCATEコマンドのロック動作。 (真の場合)TRUNCATEするかどうかを決定します bdr.ddl_locking設定に従います。

グローバルロック

  • bdr.ddl_locking-上記で説明。

  • bdr.global_lock_max_locks-可能なグローバルロックの最大数 ノードで保持されます(デフォルトは1000)。 Postgresサーバーのスタートにのみ設定できます。

  • bdr.global_lock_timeout-待機の最大許容期間を設定します グローバルロックの場合(デフォルトは1分)。値がゼロの場合、このタイムアウトは無効になります。

  • bdr.global_lock_statement_timeout-の最大許容期間を設定します グローバルロックを保持するステートメント(デフォルトは10分)。 値がゼロの場合、このタイムアウトは無効になります。

  • bdr.global_lock_idle_timeout-最大許容持続時間を設定します グローバルロックを保持しているトランザクションのアイドル時間(デフォルトは10分)。 値がゼロの場合、このタイムアウトは無効になります。

ノード管理

  • bdr.replay_progress_frequency-レプリケーション位置を送信する間隔 残りのクラスターへの情報(デフォルトは1分)。

汎用レプリケーション

  • bdr.xact_replication-現在のトランザクションを複製します(デフォルトは「オン」)。

    • これをオフにmakeと、トランザクション全体がローカルのみになります。つまり、トランザクションはBDRおよびその他すべての論理デコードのダウンストリームターゲットによるロジカルデコーディングロジカルデコーディングから可視なくなります。データは、ロジカルスタンバイノードを含む他のノードには転送されません。

    • このパラメータは、bdr_superuserロールまたはスーパーユーザロールによってのみ設定できます。

    • このパラメータは、bdr.permit_unsafe_commands = onを除き、SET LOCALコマンドを使用して現在のトランザクション内でのみ設定できます。

!!! Note * トランザクションレプリケーションが無効になっている場合でも、WALは生成されますが、これらの変更はオリジンでフィルタリングされます。

!!! Warning * bdr.xact_replicationをオフにすると、ノード間でデータの不整合が発生します。ノード間のデータの相違から回復する場合、またはレプリケーションを続行するには単一ノードの変更が必要なレプリケーション状況でのみ使用してください。ご自身のリスクで使用してください。

  • bdr.permit_unsafe_commands-コマンドの安全性チェックを無効にするオプション

    • 一般的な使用には安全でないと見なされます。

    • bdr_superuserまたはPostgreSQLスーパーユーザが必要です。

!!! Warning * 通常安全と見なされないコマンドは、一貫性のない結果を生成するか、レプリケーションを完全に中断する可能性があります。ご自身のリスクで使用してください。

  • bdr.batch_inserts-内の1つのテーブルへの連続挿入数 単一のトランザクションは、そのテーブルの挿入のバッチ処理をオンにします。

    • このオプションを使用すると、挿入のセットではなく、ラージのデータを内部的にCOPYとしてレプリケーションできます。また、ノード結合中の初期データのコピー方法も示します。

  • bdr.maximum_clock_skew

    • これにより、bdr.maximum_clock_skew_actionをトリガーする前に、着信トランザクションコミットタイムスタンプとサブスクライバーの現在の時刻との最大の差と見なされる値が指定されます。

    • これにより、現在再生されているトランザクションのタイムスタンプが、サブスクライバーの現在の時刻と比較して将来にあるかどうかが確認されます。そして、その差がbdr.maximum_clock_skewよりも大きい場合、bdr.maximum_clock_skew_action設定で指定されたアクションを実行します。

デフォルトは-1です。つまり、クロックスキューを無視します(チェックはオフになります)。すべてのサーバーのクロックが同期されているときに0を設定することは有効です。トランザクションを再生しているという事実は、過去にコミットされたことを意味します。

  • bdr.maximum_clock_skew_action

    • これは、bdr.maximum_clock_skewよりも高いクロックスキューが検出された場合に実行するアクションを指定します。

    • このオプションには2つの可能な値があります。

    • -WARN-この事実に関するワーニングを記録します。サーバーログのフラッディングを防ぐため、警告は最大で毎分1回(デフォルト)記録されます。 -WAIT-現在のローカルタイムスタンプが、リモートコミットタイムスタンプからbdr.maximum_clock_skewを引いたものよりも古くなるまで待機します。

CRDT

  • bdr.crdt_raw_value-CRDT Data Typesの出力フォーマットを設定します。 デフォルトの出力(この設定が結果の場合)は、現在の 基本CRDTタイプの値(例、crdt_pncounterのbigint)。 onに設定すると、戻り値は CRDT値。例、マルチプルのノードからの状態を含めることができます。

最大準備トランザクション

  • max_prepared_transactions-対処するために十分に高く設定する必要があります 同時準備トランザクションの最大数 明示的な2フェーズコミット、CAMOまたはEagerによるクラスター トランザクション。制限を超えると、ノードが ローカルの二相コミットまたはCAMOトランザクション クラスター上の熱心なトランザクション。 Postgresサーバーのスタートにのみ設定できます。 (EDB Postgres Extended)

熱心な複製

  • bdr.commit_scope-コミットスコープをglobalに設定すると有効になります (デフォルト)。

  • bdr.global_commit_timeout-グローバルの両方のステージのタイムアウト 二相コミット(デフォルトは60秒)およびCAMOで保護されたトランザクション CAMOを待機する時間の制限として、コミットフェーズで パートナー。

!!! Note * これは、 EDB Postgres Extendedでのみ利用可能です。

最大1回コミットする

  • bdr.enable_camo-CAMO機能を有効にして制御するために使用されます。 デフォルトはoffです。 CAMOはトランザクションごとにオンに切り替えることができます これをremote_write、remote_commit_asyncに設定する、または remote_commit_flush。下位互換性のために、値 on、true、および1は、最も安全なremote_commit_flushモードを設定します。 falseまたは0もCAMOを無効にします。

  • bdr.camo_partner_of-データベースごとにCAMOパートナーを指定できます。 コロンで結合されたデータベース名前とノード名前のペアが必要です。複数 ペアを指定できますが、データベースごとに最初に現れるもののみ がアカウントされます。例:'db1:node_4 test_db:test_node_3'。 Postgresサーバーのスタートにのみ設定できます。

  • bdr.camo_origin_for-オリジンのデータベースごとのノード名前 CAMOペアリングのトランザクション。データベースごとに、これはマッチニーズがあります 対応するオリジンノードでbdr.camo_partner_of設定を使用します。 Postgresサーバーのスタートにのみ設定できます。

  • bdr.standby_dsn-接続のマニュアルオーバーライドを許可します 以来変更された場合にCAMOパートナーに到達するための文字列(DSN) ローカルノードのクラッシュ。通常は設定しないでください。 Postgresサーバーのスタートにのみ設定できます。

  • bdr.camo_local_mode_delay-適用されるコミット遅延 通常発生するオーバーヘッドをエミュレートCAMOのローカルモード CAMOパートナーはトランザクションを確認する必要があります。デフォルトは5ミリ秒です。 0に設定すると、この機能が無効になります。

  • bdr.camo_enable_client_warnings-アクティビティが CAMOプロパティができないデータベースで実行 保証されています。これはデフォルトで有効になっています。十分な情報に基づいたユーザーが選択できます これを無効にして、ログに記録される警告の量を減らします。

!!! Note * これは、 EDB Postgres Extendedでのみ利用可能です。

タイムスタンプベースのスナップショット

  • bdr.timestamp_snapshot_keep-の有効なスナップショットを保持する期間 タイムスタンプベースのsnapshotの使用(デフォルト0、過去のスナップショットを保持しないことを意味します)。 上記のsnapshot_timestampも参照してください。 (EDB Postgres Extended)

監視とログ

  • bdr.debug_level- BDRが書き込みに使用するログレベルを定義します デバッグメッセージ。デフォルト値はdebug2です。見たいなら 詳細なBDRデバッグ出力、bdr.debug_level = 'log'を設定します。

  • bdr.trace_level-上記と同様に、これはログレベルを定義します BDRトレースメッセージに使用します。のすべてのノードでトレースを有効にする BDRクラスターは、2ndQuadrantサポートが問題を診断するのにヘルプます。 Postgresサーバーのスタートにのみ設定できます。

!!! Warning * bdr.debug_levelまたはbdr.trace_levelを> = log_min_messagesの値に設定すると、非常にラージのログ出力が生成される可能性があるため、ログディスクスペースの枯渇を防ぐためにログフィルタリング、アーカイブ、ローテーションの計画が整っていない限り、稼動で長期間有効にしないでください。

内部

  • bdr.raft_keep_min_entries-保持するエントリの最小数 ログ圧縮を行うときにログをラフティングする(デフォルトは100)。値0は無効になります ログ圧縮。 警告:ログの圧縮が無効になっている場合、ログは 永遠にサイズが大きくなります。 Postgresサーバーのスタートにのみ設定できます。

  • bdr.raft_response_timeout-ネットワーク障害をアカウントして、 実装されたラフトコンセンサスプロトコルは、 一定の時間。このタイムアウトのデフォルトは30秒です。

  • bdr.raft_log_min_apply_duration-ステートマシンを移動するには 転送すると、Raftは内部ログにエントリを追加します。通常時 オペレーション、追加には数ミリ秒しかかかりません。これは その追加アクションの期間の上限しきい値。 INFOメッセージが記録されます。これは、 実際の問題。このパラメータのデフォルト値は3000ミリ秒です。

  • bdr.raft_log_min_message_duration-コンセンサスリクエストをログするタイミング。 ログコンセンサスリクエストの往復時間を測定し、 時間がこのパラメータを超える場合のINFOメッセージ。デフォルト値 このパラメータの最大値は5000ミリ秒です。

  • bdr.raft_group_max_connections-接続の最大数 PostgresサーバーのすべてのBDRグループ全体。これらの接続は運ぶ グループのノード間のbdrコンセンサスリクエスト。これのデフォルト値 パラメータは100接続です。 Postgresサーバーのスタートにのみ設定できます。

  • bdr.backwards_compatibility-バージョンを指定します 下位互換性があり、同じ数値フォーマットで bdr.bdr_version_num、たとえば30618。の正確な動作を可能にします 以前のBDRバージョン、これが一般に望ましくない効果をもたらす場合でも。 デフォルトは現在のBDRバージョンです。これはリリースから変更されるため リリースするには、構成内で明示的に使用しないことをお勧めします 値が現在のバージョンと異なる場合を除き、ファイル。

  • bdr.track_replication_estimates-レプリケーションの見積もりを用語で追跡する 同等なの適用率とキャッチアップ間隔。この情報は CAMOなどのプロトコルで使用して、 同等なノード。このパラメータはデフォルトで有効になっています。 (EDB Postgres Extended)

  • bdr.lag_tracker_apply_rate_weight-同等なからの遅れをモニタします ローカルノードからWALを適用するという点で、移動を計算します 遅延追跡の適用率の平均。このパラメータは、 この移動平均における新しい計算値の寄与度 計算。デフォルト値は0.1です。 (EDB Postgres Extended)