ITサービスマネージャ 2017年 午前2 問21
問題文
WAL(Write Ahead Log)プロトコルの目的に関する記述のうち、適切なものはどれか。
選択肢
ア:実行中のトランザクションを一時停止させることなく、チェックポイント処理を可能にする。
イ:デッドロック状態になっているトランザクションの検出を可能にする。
ウ:何らかの理由でDBMSが停止しても、“コミット済みであるがデータベースに書き込まれていない更新データ”の回復を可能にする。(正解)
エ:ログを格納する記録媒体に障害が発生しても、データベースのデータ更新を可能にする。
🔒 解説は解答すると表示されます
WALプロトコルの目的【午前2解説】
正解の理由
WAL(Write Ahead Log)は、データベースのデータ本体を書き換える前に、その更新内容をログへ記録する方式です。
トランザクションのコミット時に、更新内容を示すログが記録媒体へ書き込まれていれば、データ本体への反映が完了する前にDBMSが停止しても、再起動後にログを使って更新をやり直せます。このため、コミット済みの更新を回復できるウが適切です。
解法ステップ
- WALの「Write Ahead」は「先にログを書く」という意味だと確認します。
- ログには、データベースに対する更新内容が記録されると考えます。
- 障害でデータ本体への書込みが完了していなくても、ログを基に更新を再実行できます。
- したがって、コミット済みの更新データを回復できるウを選びます。
選択肢別の誤答解説
- ア:チェックポイントは、障害回復に必要なログの範囲を整理する処理です。実行中のトランザクションを一時停止させないチェックポイントもありますが、それ自体がWALプロトコルの目的ではありません。
- イ:デッドロックの検出は、トランザクション間の待ち関係などを調べて行います。ログへの先行書込みとは別の仕組みです。
- ウ:コミット済みの更新がデータ本体に反映される前に障害が起きても、ログを使って更新を再実行できます。WALの目的に合致します。
- エ:ログを格納する記録媒体自体が故障した場合、ログを利用できない可能性があります。媒体障害への対応には、ログの二重化やバックアップなどが必要です。
よくある誤解
-
コミット済みなら、データ本体への書込みも完了している
必ずしもそうではありません。コミット時点ではログが記録され、データ本体への反映は後になることがあります。 -
WALは障害後に未コミットの更新も必ず反映する
未コミットの更新は、回復時に取り消す必要があります。WALはログを使った回復を可能にする仕組みであり、すべての更新を再実行するわけではありません。 -
WALがあればログ媒体の故障にも対応できる
WALはログを先に記録する規則です。ログ媒体そのものの故障に備えるには、別途、冗長化などが必要です。
補足コラム
障害回復では、コミット済みの更新をログから再実行する処理を「REDO」、未コミットの更新を取り消す処理を「UNDO」と呼びます。WALでは、データ本体の更新より先にログを記録することで、こうした回復処理に必要な情報を残します。
FAQ
Q. コミット済みの更新でも、データ本体への書込み前に障害が起きることがあるのですか?
A. あります。コミット済みであることと、更新後のデータがデータ本体へ書き込まれていることは、必ずしも同時ではありません。ログが残っていれば、再起動後に更新を再実行できます。
A. あります。コミット済みであることと、更新後のデータがデータ本体へ書き込まれていることは、必ずしも同時ではありません。ログが残っていれば、再起動後に更新を再実行できます。
Q. チェックポイントとWALは同じものですか?
A. 別のものです。チェックポイントは回復処理の対象となるログを整理する仕組みで、WALはデータ本体より先にログを書き込む規則です。
A. 別のものです。チェックポイントは回復処理の対象となるログを整理する仕組みで、WALはデータ本体より先にログを書き込む規則です。
関連キーワード: WAL、先行書込みログ、トランザクション、REDO、UNDO、チェックポイント

\ せっかくなら /
ITサービスマネージャを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

