Postgres ClickPipeの同期制御
このドキュメントでは、ClickPipeがCDC (実行中) モードにあるときのPostgres ClickPipeの同期を制御する方法について説明します。
概要
データベースのClickPipeは、ソースデータベースからデータをプルし、ターゲットデータベースにプッシュする2つの並行プロセスで構成されるアーキテクチャを持っています。プルプロセスは、データをどのくらいの頻度でプルするか、また一度にどれだけのデータをプルするかを定義した同期設定によって制御されます。「一度に」というのは、バッチを意味します ― ClickPipeはデータをバッチでプルおよびプッシュします。
Postgres ClickPipeの同期を制御する方法は主に2つあります。以下の設定のいずれかが有効になると、ClickPipeはプッシュを開始します。
同期間隔
パイプの同期間隔は、ClickPipeがソースデータベースからレコードをプルする時間(秒単位)です。ClickHouseにプッシュするための時間は、この間隔には含まれません。
デフォルトは1分です。 同期間隔は任意の正の整数値に設定できますが、10秒以上に保つことを推奨します。
プルバッチサイズ
プルバッチサイズは、ClickPipeが一度のバッチでソースデータベースからプルするレコードの数です。レコードとは、パイプの一部であるテーブルで行われた挿入、更新、削除を意味します。
デフォルトは100,000レコードです。 安全な最大値は1000万です。
例外:ソースでの長時間トランザクション
ソースデータベースでトランザクションが実行されると、ClickPipeはそのトランザクションのCOMMITを受信するまで進行を待ちます。これは、同期間隔とプルバッチサイズのオーバーライドを伴います。
同期設定の構成
ClickPipeを作成するか、既存のClickPipeを編集する際に、同期間隔とプルバッチサイズを設定できます。 ClickPipeを作成する際、以下のように作成ウィザードの第2ステップで表示されます。

既存のClickPipeを編集する際には、パイプの設定タブに移動し、パイプを一時停止した後、ここで構成をクリックします:

これにより、同期設定が表示されるフライアウトが開き、同期間隔とプルバッチサイズを変更できます:

レプリケーションスロットの成長に対応するための同期設定の微調整
CDCパイプの大規模なレプリケーションスロットを扱うために、これらの設定を使用する方法についてお話ししましょう。 ClickHouseへのプッシュ時間は、ソースデータベースからのプル時間と線形にスケールしません。これを活用して、大きなレプリケーションスロットのサイズを削減できます。 同期間隔とプルバッチサイズの両方を増やすことで、ClickPipeはソースデータベースから大量のデータを一度にプルし、その後ClickHouseにプッシュします。
同期制御の動作を監視する
ClickPipeのメトリクスタブにあるCDC Syncsテーブルで、各バッチにかかる時間を確認できます。ここでの時間にはプッシュ時間が含まれており、行が入ってこない場合、ClickPipeは待機し、その待機時間も期間に含まれます。
