Lag control

BDRオリジンノード上のデータベースアプリケーションのデータスループットは、コミットされたデータをダウンストリームのピアノードに安全にレプリケートできる速度を超える場合があります。この不均衡が高可用性アプリケーションで一定期間を超えてまたは慢性的に続く場合、ディザスターリカバリーまたはビジネス継続性計画に関連する組織の目標が満たされない可能性があります。

レプリケーションラグ制御(RLC)機能は、動的レート制限デバイスを使用してこの不均衡を調整し、 BDRグループノード間のデータフローがこれらの組織の目標に準拠するように設計されています。これは、 BDRノード間のレプリケーション遅延の範囲を制御することによって行います。

これらの目的の一部は次のとおりです。

  • 目標復旧ポイント(RPO)は、計画外のイベントが原因で失われる可能性のあるデータの最大許容量を指定し、通常は時間で表されます。レプリケートされないシステムでは、RPOを使用してバックアップ間隔を設定し、コミットされたデータが障害によって失われるリスクを制限します。レプリケートされたシステムの場合、RPOは、1つ以上のピアノードに安全に適用されていないコミットされたデータの許容量を決定します。

  • リソース制約目標(RCO)は、有限のストレージ制約があることを認めています。このストレージには、データベースファイル、WAL、および操作を続行するために必要な一時ファイルまたは中間ファイルが含まれます。レプリケートされたシステムの場合、遅延が増加すると、これらのストレージリソースに対する要求も増加します。

  • グループ弾性目標(GEO)は、ノードがピアノードに受け入れられない形で保存できないクリップで新しいデータを発信していないことを保証します。その場合、その条件の検出をデータベースノードの数を拡張する決定の1つのメトリックとして使用できます。同様に、その状態が緩和すると、データベースノードの数を縮小するという決定に影響を与える可能性があります。

ラグ制御は、クライアント接続が READ WRITE トランザクションをコミットできる速度を制御することにより、レプリケーションの遅延を管理します。レプリケーションラグは、達成する目的に応じて、ラグタイムまたはラグサイズとして測定されます。トランザクションのコミット率は、構成されたBDRのコミット遅延時間を使用して調整されます。

要件

ラグ制御の使用を開始するには:

1.すべてのデータベースアプリケーションで許容できる最大のコミット遅延時間bdr.lag_control_max_commit_delay を決定します。

1.使用するラグメジャーを決定します。ラグサイズbdr.lag_control_max_lag_size またはラグタイムbdr.lag_control_max_lag_time のいずれかを選択します。

1.ステップ2で最小許容ノード数として選択したラグメジャーを満たす必要があるグループbdr.lag_control_min_conforming_nodes 内のBDRノードの数を決定します。

構成

ラグ制御は、 postgresql.conf 構成パラメーターを使用してグループ内の各BDRノードで構成されます。ラグ制御を有効にするには、 bdr.lag_control_max_commit_delay と、 bdr.lag_control_max_lag_size またはbdr.lag_control_max_lag_time のいずれかをゼロ以外の正の値に設定します。

bdr.lag_control_max_commit_delay は、必要に応じてサブミリ秒設定を含む、小数部によるミリ秒の指定を許可および推奨します。

デフォルトでは、 bdr.lag_control_min_conforming_nodes は1に設定されています。完全なリストについては、

ラグ制御 を参照してください

概要

ラグ制御は、クライアント接続レベルで動作する動的なTPSレート制限メカニズムです。構成されたラグコントロールの制約を満たしながら、できるだけ目立たないように設計されています。これは、十分なBDRノードが構成されたラグメジャーしきい値を下回るのに十分な速度で変更をレプリケートできる場合、 BDRランタイムのコミット遅延は0ミリ秒に固定されることを意味します。

これに当てはまらない場合、 BDRランタイムのコミット遅延を必要に応じて最小限に調整しますが、準拠ノードの数が最小しきい値に戻るまでそれ以上には調整しません。

最小ノードしきい値に達した後でも、ラグ制御はBDRランタイムのコミット遅延をゼロに戻そうとし続けます。 BDRコミット遅延は、ほとんどの場合、平衡レベルで上下しますが、データスループットまたはラグ適用率が向上すると、コミット遅延は減少します。

BDRコミット遅延は、コミット後の遅延です。これは、トランザクションがコミットされた後、トランザクションによってロックまたは取得されたすべてのPostgresリソースが解放された後に発生します。したがって、遅延は、同時アクティブなトランザクションがその値を監視または変更したり、リソースを取得したりすることを妨げるものではありません。 Postgres拡張機能で管理される外部リソースについては、同じ保証はありません。拡張機能の依存関係に関係なく、 BDR拡張機能がpostgresql.conf の拡張機能ベースのリソースマネージャーの前にリストされている場合、同じことが保証されます。

厳密に言えば、 BDRコミット遅延はトランザクションごとの遅延ではありません。これは、特定のクライアント接続のトランザクションのストリームでのコミット遅延の平均値です。この手法により、コミットの遅延と値のきめ細かな調整で、OSスケジューラー、クロック割り込み、およびシステム負荷による変動を回避できます。また、 BDRランタイムのコミット遅延を可能な限り最小の期間のマイクロ秒以内に解決して、ラグメジャーのしきい値を維持できます。

注釈

BDRのコミット遅延とPostgresのコミット遅延を混同しないでください。それらは無関係であり、異なる機能を実行します。一方を他方で置き換えないでください。

取引申請

BDRコミット遅延は、ユーザーアプリケーションのデータを変更するすべてのREAD WRITEトランザクションに適用されます。これは、宣言された READ WRITE トランザクションを含む、データを変更しないトランザクションはコミット遅延から免除されることを意味します。

非同期トランザクションのコミットは、 BDRコミット遅延も実行します。これは直感に反するように見えるかもしれませんが、そのパフォーマンスのおかげで、非同期コミットはレプリケーションラグの最大の原因の1つになる可能性があります。

PostgresとBDRの補助プロセスは、トランザクションのコミットで遅延しません。最も注目すべきは、 BDRライターはローカルノードでリモートトランザクションを適用するときにコミット遅延を実行しないことです。 BDRライターは送信レプリケーションのラグに何も寄与せず、トランザクションのコミットが遅延によって調整されないことにより、受信レプリケーションのラグを最も削減できるため、これは設計です。

制限

最大コミット遅延bdr.lag_control_max_commit_delay は、ハード制限を表す上限値です。これは、コミット遅延が構成された値を超えることはないことを意味します。逆に、最大ラグメジャーbdr.lag_control_max_lag_size およびbdr.lag_control_max_lag_time は、超えることができるソフト制限です。最大コミット遅延に達した場合、遅延の継続的な増加を防ぐための遅延対策に追加のバックプレッシャーはありません。

BDRレプリケーションセットを変更しないオリジントランザクションをコミット遅延から免除する方法はありません。これらのトランザクションでは、最大トランザクション遅延を0に設定すると便利です。

注意事項

アプリケーション TPS は、レプリケーションの遅延に影響を与える可能性のある多くの要因の 1 つです。その他の要因には、 BDRコミット遅延の効果が低下する可能性のあるトランザクションの平均サイズが含まれます。特に、バルクロード操作ではレプリケーションの遅延が増加する可能性があり、これにより、通常のアプリケーションで合理的に予想されるレベルを超えてBDRランタイムのコミット遅延が増加する可能性がありますが、それでも最大許容遅延は未満です。

同様に、OLTP要件が非常に高く、データ変更が少ないアプリケーションは、許容可能なBDRコミット遅延設定によって過度に制限される可能性があります。

このような場合、 SET [SESSION|LOCAL] コマンドを使用して、これらのアプリケーションのラグ制御設定をカスタム構成したり、それらのアプリケーションを変更したりすると便利です。たとえば、バルクロード操作は、トランザクションのスナップショット期間とWAL保持サイズを制限したり、バルクロードが失敗した場合にリスタートポイントを確立したりするために、複数の小さなトランザクションに分割される場合があります。ラグ制御に従って、これらのトランザクションのコミットは、非常に長いBDRコミットの遅延をスケジュールして、以前の部分的なバルクロードが原因で発生したラグを解消することもできます。

組織目標の達成

前述の目標リストの例:

  • RPOは、適切な最大ラグタイムを設定することで満たすことができます。

  • RCOは、適切な最大ラグサイズを設定することで満たすことができます。

  • GEOは、 BDRランタイムのコミット遅延とBDRタイムラグの測定値を監視することにより満たすことができます。

前述のように、 BDR実行時の最大コミット遅延がBDRで構成されたコミット遅延制限に固定され、ラグメジャーがBDRで構成された最大レベルを一貫して超えている場合、このシナリオはBDRグループ拡張のマーカーになる可能性があります。