今回は、Silverの「運用管理 - バックアップ方法(トランザクションログ(WAL)とWALアーカイブ)」からの出題です。
設定パラメータ archive_command で指定したコマンドが実行される。
コマンドの実行に失敗しても再実行されないことに注意する必要がある。
PostgreSQLはコマンドを実行したかどうかは管理するが、コマンドが実際に何をしているのか、WALアーカイブとして適切な処理をしているかどうかは関知しない。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2022年3月2日
WALはWrite-Ahead-Logの略で、データベースファイルの更新に先立ち、トランザクションの情報をログファイルに書き出すものです。COMMIT処理は、WALへの書き込みをもってクライアントには完了が通知され、時間がかかるデータベースファイル本体の更新は非同期に実行するようになっています。
データベース更新の情報はすべてWALに書き込まれるので、データベースファイルに障害が発生したような場合でも、ある時点のデータベースのバックアップと、それ以降に生成されたすべてのWALファイルがあれば、データベースを最新の状態に復元することができます。この仕組みを利用するのがポイントインタイムリカバリ(PITR)です。
ただし、WALを放置しておくとサイズがどんどん大きくなって、すぐにディスク容量がなくなってしまいます。これを避けるため、デフォルトでは古いWALファイルをリサイクルして、WALがディスクを圧迫しないようになっていますが、そのためポイントインタイムリカバリなどもデフォルトでは利用できません。すべてのWALファイルを保管するための機能がWALアーカイブです。
WALアーカイブを利用するには、設定パラメータwal_levelをreplica以上、wal_archiveをonにした上で、WALをアーカイブするためのコマンドをarchive_commandに設定します。通常は、データベースが置かれるのとは別のディスクにWALをコピーするコマンド(シェルスクリプトなど)を設定しますが、このコマンドは成功したら0を、失敗したら非ゼロを返すようにする必要があります。PostgreSQLはarchive_commandが成功したかどうかを管理し、失敗した場合には再実行します。アーカイブに成功したら、そのWALはリサイクルされます。
なお、PostgreSQLはarchive_commandが実際に何をしているのかについて関知しません。ファイルをコピーするコマンドが成功を返したかどうかは管理しますが、本当にコピーされたかどうか、そもそもarchive_commandがコピー処理をしているかどうか、などは管理者の設定に任されますので、十分にテストをした上で設定する必要があります。
「アーカイブ」は名詞としては「書庫」、動詞としては「書庫などに保管する」という意味なので、WALアーカイブはその動詞の意味で理解すれば良いのですが、Linuxのarコマンドやtarコマンドなど、複数のファイルを1つのファイル(書庫)にまとめるコマンドでもアーカイブという用語が使われるので、誤解しないように注意してください。
従って正解はA、C、Eです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.