Datastream は、PostgreSQL の write-ahead log(WAL)を読み取り、ソーステーブルから行レベルのデータ変更をキャプチャして複製します。データベース サーバーは、各トランザクションの変更を WAL ファイルに保存します。WAL の保持、タイムアウト、レプリケーション スロットのパラメータを構成し、ログファイルの増加を最適化して、ストリーム レイテンシの増加とストレージの枯渇を防ぐことができます。
PostgreSQL WAL ファイルの構成パラメータを設定する
PostgreSQL データベースに次の構成設定を適用することをおすすめします。
max_slot_wal_keep_size: このパラメータ(PostgreSQL 13 以降でのみ使用可能)を設定して、レプリケーション スロットで使用されるストレージ量を制限します。これは、長時間実行されるトランザクションでは特に重要です。極端な場合、WAL ファイルサイズがストレージ全体を占有し、データベースがクラッシュする可能性があります。statement_timeout: このパラメータを選択した値に設定して、長時間実行トランザクションによって生じるレイテンシを短縮します。max_slot_wal_keep_sizeをサポートしていないデータベースに対して、代替の予防措置としてstatement_timeoutを使用することもできます。wal_sender_timeout: このパラメータを0(タイムアウトを無効にする場合)または 10 分以上の値に設定します。
10 個を超えるストリームを作成する予定がある場合、または計画されたストリーム数に加えて他のリソースで使用される論理レプリケーション スロットの数が 10 を超える場合は、次のパラメータを変更してください。
max_replication_slots: データベースに設定されているレプリケーション スロットの数に応じて、このパラメータの値を増やします(ストリームごとに 1 つのレプリケーション スロットが必要です)。max_replication_slotsは、サーバーの起動時にのみ設定できます。max_wal_senders: このパラメータの値をmax_replication_slotsパラメータの値よりも大きくします。サーバーの起動時にのみmax_wal_sendersを設定できます。
WAL ログファイルを最適化する
PostgreSQL ソースからデータを複製する際に、ストリームのレイテンシが高くなり、WAL ログファイルのサイズが急激に増加するのを防ぐには、次の予防措置を適用することを検討してください。
- 大規模な長時間実行オペレーションは、WAL ファイルのサイズを大幅に増加させる可能性があるため、避けてください。
- バッチ オペレーション中に
UNLOGGEDテーブルまたはTEMPORARYテーブルを使用します。 - WAL 構成を確認し、チェックポイントの頻度を減らすことを検討してください。詳細については、WAL 構成をご覧ください。
- 大規模な
DELETEオペレーションがないか確認し、TRUNCATEオペレーションに置き換えることを検討します。これにより、WAL ファイルのデータを大幅に削減できますが、Datastream はTRUNCATEオペレーションを複製しないため、注意が必要です。
次のステップ
- ソースとして PostgreSQL を使用する場合の詳細
- ソース PostgreSQL データベースの構成の詳細を確認する。