今回は、Silverの「運用管理 - バックアップ方法(トランザクションログ(WAL)とWALアーカイブ)」からの出題です。
WALファイルはPostgreSQL バージョン9.6まではデータベースクラスタのpg_xlogディレクトリの下に作られていたが、PostgreSQL バージョン10以降ではデータベースクラスタのpg_walディレクトリの下に作られる。
ポイントインタイムリカバリ(PITR)では、archive_commandパラメータを適切に設定することで、生成されたWALファイルをデータベースクラスタの外のディレクトリにコピーして保存する必要がある。
PITRでは、wal_levelパラメータを適切に設定し、詳細な情報がWALファイルに書き出されるようにする必要がある。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2020年4月8日
PostgreSQLをはじめ多くのデータベースでは、データの変更時にデータファイルをいきなり更新するのではなく、まず追記型のログファイルに変更内容を書き出し、その後の適当な時点でデータファイルを更新する、という手順をとっています。この場合、ログファイルへの書き出しが完了した時点で、クライアントには更新完了のステータスが返されます。 このログファイルのことを、一般的にはトランザクションログ、などと呼ぶことが多いですが、PostgreSQLではデータファイルの更新に先立って(ahead)、書き出す(write)という意味で、Write Ahead Log(WAL)と呼んでいます。
データファイルが更新されるより前に何らかの原因でデータベースが異常終了した場合、データベースの再起動時に、WALに書き出された変更のうち、どこまでがデータファイルに反映されているかを調べ、未反映の部分についてデータファイルを更新する処理(リカバリ)が行われます。 WALファイルは、トランザクションのログ、という意味でPostgreSQL 9.6まではpg_xlogというディレクトリの下に出力されていましたが、PostgreSQL 10からはpg_walというディレクトリの下に出力するようになりました。
ポイントインタイムリカバリ(PITR)は、ある時点のバックアップ(ベースバックアップ)に、それ以降に発生したWALの内容をすべて適用することで、データベースの内容を最新(あるいは指定した特定の時点)の状態に復旧(リカバリ)する手段ですが、データベースクラスタ内に保存できるWALのサイズは有限なので、それを別の場所にコピーして保存する必要があります。この処理のことをWALアーカイブと呼びますが、そのためにはarchive_commandというパラメータにファイルをコピーするためのコマンドあるいはスクリプトを設定します。また、wal_levelをreplicaまたはそれ以上の値に設定し、リカバリに必要な情報が出力されるようにする必要があります。デフォルトはreplicaなので変更しなくても大丈夫ですが、minimalに設定されていると、クラッシュリカバリのみが可能で、PITRは実行できなくなります。
間違っているものを選ぶ問題なので、正解はAです。
WALの更新はデータファイルの更新よりも前に行われます。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.