Comparison Performance

LiveCompareは本番システムでの使用に最適化されており、後述するチューニング用のさまざまなパラメーターがあります。比較ラウンドは読み取り専用のワークロードです。ユースケースの例では、4つの接続と4つのワーカーを使用して9分17秒で6つのテーブルの43,109,165行を比較し、毎秒約77,000行、または4時間未満で10億行の比較パフォーマンスを得ました。

上記のユースケースは、一般的なユースケースと見なすことができます。低負荷、テスト、移行、およびその他の特定のシナリオでは、サーバー側のカーソルを使用するようにdata_fetch_mode 設定を変更することにより、速度を向上させることができる場合があります。私たちの実験では、さまざまな種類のサーバーサイドカーソルを使用すると、小規模または大規模なテーブルを含むユースケースでパフォーマンスが向上します。

ユーザーのセキュリティに関する考慮事項

PostgreSQL 13以前の場合、LiveCompareには、比較されるすべてのデータを読み取ることができるユーザーが必要です。 PostgreSQL 14では、LiveCompareに使用できる新しいロールpg_read_all_data が導入されました。

logical_replication_mode = bdr の場合、LiveCompareには bdr_superuser ロールが付与されたユーザーが必要です。 logical_replication_mode = pglogical の場合、LiveCompareには pglogical_superuser ロールが付与されたユーザーが必要です。

PGDでDMLスクリプトを適用するには、すべての発散接続(潜在的にすべてのデータ接続)で、 bdr.xact_replication を無効にするためにbdr_superuser が付与されているユーザーが必要です。

PGDが使用されている場合、LiveCompareはすべての固定行をbdr_local_only_origin と呼ばれるレプリケーションオリジンに関連付けます。 LiveCompareは、過去のトランザクション日時でDMLも適用するため、データベースで実行されている実際のDMLとPGD競合がある場合、 LiveCompare DMLは常に競合を失います。

difference_fix_start_query のデフォルト設定では、適用スクリプトのトランザクションはロールをテーブルの所有者に変更し、データベースユーザーが悪意のあるトリガーを作成して修正を適用するロールにアクセスするのを防ぎます。その結果、ダイバージェント接続のユーザーは、ロールをテーブル所有者に切り替える機能を持っている必要があります。