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