PostgreSQL データベースの WAL ログファイルの操作

Datastream は、PostgreSQL WAL(write-ahead log)トランザクション ログを使用して PostgreSQL ストリームを読み取ります。ログは、データベース サーバー上の WAL ファイルに保存されます。WAL ログの各レコードは、データベースの 1 つのテーブルに含まれる実際のデータに対する 1 つの変更を表します。

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 オペレーションを複製しないため、注意が必要です。

次のステップ