【デスペ5問】WALプロトコル(データベーススペシャリストAMII)
このNoteには、データベーススペシャリスト(デスペ)のAMIIの「WAL(ログ先書き)」についてまとめました。
WALは、トランザクションの早い段階で、操作記録(ログ)をファイルに書き出すことです。
SQL文を発行すればデータベースの変更が行われると思うかもですが、実際は違います。実際のデータベースでの処理まで知って、復旧作業でなるべく直前の状態にまで復旧できる理由まで理解しましょう。
WALは令和02年以降、出題されていません。頻出問題ではないですが、実際のデータベース処理・復旧作業を理解するために重要な手順です。
このNoteでは、どんなログを記録していたか、データベースの実更新のタイミング、コミット(確定)の具体的な定義などが曖昧だったことに気づく問題演習ができるよう構成しました。
デスペのAMIIはざっくり5年分解けば、全パターンが把握できます。
私が合格した時に、学習ノートにジャンル毎に問題をまとめました。このNoteの解説は、学習ノートと、私のIT専門学校での授業内容を基にしています。
それでは始めましょう!
WALとは「ログ先書き」
WAL(Write Ahead Logging, ログ先書き)プロトコルでは、データベースの操作記録(ログ)のファイルへの書き出しを優先します。
ログの書き出しを、トランザクションのコミット処理やデータベースの更新処理よりも優先します。
なぜなら、元になるデータベースをバックアップから復元し、ログに基づいてデータベース更新処理を実行すれば直前の状態にまで復旧できるからです。
またデータベースの実更新は補助記憶装置にアクセスするため、時間がかかります。よって、しばらくはアクセスの速いバッファ(メモリ)内でデータベースを更新し、あるタイミング(チェックポイント)でまとめて補助記憶のデータベースの実更新を行います。
なお、バッファ(メモリ)は揮発性なので、障害によって電源が落ちるなどすれば消失してしまいます。よって、ログをいち早く不揮発性の補助記憶にファイルとして書き出す必要があるのです。
WALプロトコルの手順と目的
WALはログをいち早く書き出す手順。WALの目的は、データベースをなるべく最新の状態にまで復旧することです。
正答はエ。
ア~エを見ると、1と6はトランザクションの開始と終了で共通しています。
次に見るべきは、3と4のログ書き出しをなるべく早く行っている選択肢を探すこと。
2のデータベースを更新するよりも、先にログ(記録)の書き出し3, 4を優先すべきです。
なお、補助記憶のデータベース更新は毎回のトランザクションで行いません。更新は時間がかかりますから、チェックポイントでまとめて行います。
正答はウ。
ア:WALはトランザクションの手順であり、チェックポイント処理(補助記憶のデータベースの更新作業)とは無関係です。
イ:待ちグラフの説明。待ちグラフでは、トランザクションが別のトランザクションがロックしている資源を必要としているかを図示でき、閉路(ループ)ならデッドロックが発生していると分かります。
ウ:正しい。更新後ログがあれば、チェックポイント以後のデータベースの処理を進め(ロールフォワード)て、復旧できます。
エ:ログがなければ、チェックポイント以後のデータベースの復旧ができません。ログの記録媒体に障害が発生しても大丈夫なのようにするには、記録媒体を複数用意して冗長したり、バックアップを別に保管したりなどが考えられます。
ログファイル・コミット・チェックポイントとの関係
データベースの操作ログには2種類あります。
ロールバックのための更新前情報
ロールフォワードのための更新後情報
ロールバックは、データベース更新を取り消して元の内容に巻き戻す処理。コミット(確定)しなかった時に行います。
ロールフォワードは、コミットした内容にまでトランザクションを進める処理です。
データベースの実データはチェックポイントでまとめて実施されますが、チェックポイント以後にコミットしたトランザクションの操作は更新後情報によって処理を進めます。
障害復旧作業における、ログファイルの役割の問題です。
正答はエ。
ア:トランザクションの取り消しはロールバックであり、更新前情報を参考に行われます。
イ:チェックポイント以後にコミットした内容は、更新後情報を参考にロールフォワードで復旧させます。
ウ:ロールバックはトランザクションの取り消しなので、再実行はしません。ロールバック処理をして、利用者や管理者から再度同じトランザウションが命令されれば、別トランザウションとして実行します。
エ:ロールフォワードは更新後情報を参考に行います。
コミットはデータベースへの操作を確定させることです。
コミットしたからには、障害が発生しても状態復元しなければなりません。
正答はエ。
ウのログバッファは、単なるメモリ(揮発性)なので障害でシステムが落ちれば喪失してしまいます。頭で覚えていても、メモしてなければ忘れてしまうリスクがありますよね。
イのチェックポイントは補助記憶のデータベースを実際に更新するタイミングです。障害復旧ではチェックポイントまではすんなり復旧できます。
エのログファイルは、補助記憶(不揮発性)への書き込み。チェックポイントで取得したデータベースを、更新後情報(ログ)を参考に処理を進め(ロールフォワード)れば、復旧できます。
正答はエ。
チェックポイントは補助記憶のデータベースを実際に更新するタイミングです。
エの「データベースへの書き出し」はチェックポイントで行う実データベースの更新処理です。
実際のデータベースの更新処理は時間がかかるので、バッファ(メモリ)内で更新とログを一旦記録しておいて、チェックポイントでまとめて書き出します。
しかしログ(記録)は最も大事なので、WALに従ってトランザクションのなるべく早い段階で書き出します。
イの「更新前・後情報ログのファイルへの書き出し」は、WALを指しています。
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ
この記事が参加している募集
学習方法・問題特集のNoteは全て無料提供を続けます▼ もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼ もちろんコメントでも結構です(・ω・▼)ノシ