先書きログについて説明する
INSERT や DELETE などの変更がデータベースで行われると、それらの変更はまずログに書き込まれ、その後で初めてディスク上のデータ ファイルに書き込まれます。 この操作は先書きログと呼ばれます。変更が、データ ファイルにコミットされる前にログに書き込まれるためです。 停電などの問題が発生した場合、ログでは常に最新のデータが保持され、データベースの一貫した状態を確保するために使用できます。
2 つ目の利点は、最初にログに変更を書き込むことで、テーブルとインデックスへの変更を、個別ではなく一括で書き込むことができる点です。 このプロセスにより、テーブルとインデックスを最新の状態に保つために必要なディスク書き込みの回数が減ります。 ログへの書き込みは連続して実行されるため、高速です。 より低速なテーブルとインデックスへの書き込みは、一括で安全に実行できます。すべてのデータをログから復旧できるためです。 多くの小さな更新を一般に伴うワークロードでは、パフォーマンスが向上します。
Note
PostgreSQL のオンプレミス実装の場合、ログ ファイルは pg_wal ディレクトリに格納されます。 Azure Database for PostgreSQL ではファイル システムへのアクセスは提供されないため、ユーザーがログ ファイルの物理記憶領域について心配する必要はありません。
先書きログの動作を制御し、ワークロードに合わせて最適化できるサーバー パラメーターがいくつかあります。
- commit_delay - トランザクションのコミットとディスクへのログのフラッシュとの間の遅延。
- wal_buffers - 先書きログ (WAL) 用の共有メモリ内のディスク ページ バッファー数。
- max_wal_size - 自動チェックポイントをトリガーする前に WAL が増加できる最大サイズ。
- wal_writer_delay - WAL ライターによって実行される WAL フラッシュ間の時間間隔。
- wal_compression - WAL ファイルでのフルページ書き込みが圧縮されるかどうか。
- wal_level - WAL に書き込まれる情報の量を決定します。 使用できる値は REPLICA または LOGICAL です。
ポイントインタイム リストア
先書きログ (WAL) の主な目的は、データベースがクラッシュした場合にその一貫性と持続性を確保することです。 オンプレミス バージョンの PostgreSQL では、ログをアーカイブとして使用できるため、構成設定 archive_mode と archive_command を使って特定の時点に復元できます。
Azure Database for PostgreSQL はマネージド サービスであり、基になるファイル システムへのアクセスは許可されません。 ただし、すべてのデータベースを含むサーバーの自動完全バックアップは含まれています。 このバックアップにより、特定の時点までのデータを再作成できます。 バックアップは自動的にスケジュール設定され、1 日に 1 回実行されます。 復元する必要がある場合は、バックアップの保持に指定した日数 (最大 35 日) まで復元できます。 バックアップを保持する期間を指定するには:
- Azure portal で、自分の Azure Database for PostgreSQL フレキシブル サーバーに移動します。
- [概要] セクションで、使用する [構成] を選択します。
- [バックアップ] の下にある [Backup retention period (in days)] (バックアップの保有期間 (日数)) を見つけます。 スライダー バーを使って、バックアップを保持する日数を選択できます。
- [保存] を選択して変更を保存します。