比較パフォーマンス#
LiveCompareは、実稼働システムで使用するように最適化されており、チューニングのためのさまざまなパラメーターを備えています。比較ラウンドは読み取り専用のワークロードです。ユースケース例では、4つの接続と4つのワーカーを使用して9分17秒で6つのテーブルの43,109,165行を比較し、1秒あたり約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_superuserロールを持つユーザーがbdr.xact_replication
を無効にする必要があります。
PGDが使用されている場合、LiveCompareはすべての固定行をbdr_local_only_origin
と呼ばれるレプリケーションオリジンに関連付けます。
LiveCompareは、かなり過去のトランザクション日時を含むDMLも適用するため、データベースで実行されている実際のDMLとPGD競合がある場合、LiveCompare
DMLは常に競合に負けます。
デフォルト設定のdifference_fix_start_query
では、適用スクリプトのトランザクションはテーブルの所有者にロールを変更して、データベースユーザーが悪意のあるトリガーを書いて修正を適用するロールへのアクセスを取得しないようにします。その結果、分岐接続のユーザーは、ロールをテーブル所有者に切り替えることができる必要があります。