平成28年度 秋期 システムアーキテクト試験 午前Ⅱ 問21

システム障害発生時には,データベースの整合性を保ち,かつ,最新のデータベース状態に復旧する必要がある。このために,DBMS がトランザクションのコミット処理を完了とするタイミングとして,適切なものはどれか。

解答・解説

正解: エ. ログファイルへのコミット情報書込み完了時点

正解は エ です。

データベース管理システム(DBMS)において、トランザクションのACID特性のうち 耐久性(Durability) を保証するためには、コミットが完了したトランザクションの更新内容がシステム障害発生時にも失われないようにする必要があります。

DBMSでは通常、WAL(Write Ahead Logging:ログ先行書込み) というプロトコルが採用されています。これは、データベースの実データ(データファイル)を更新するよりも前に、更新内容を記録したログを不揮発性記憶装置(磁気ディスクやSSDなど)上の ログファイル に書き込む方式です。

トランザクションのコミット処理では、主記憶上のログバッファにあるログ情報およびコミット情報を、不揮発性記憶装置上の ログファイルへ書き込んだ時点 でコミット完了とします。これにより、直後にシステム障害が発生して主記憶(バッファ)上のデータが失われたとしても、再起動時にログファイルを読み込んで ロールフォワード(前進復帰) を行うことで、コミット済みの最新の状態に復旧することができます。

各選択肢の解説

  • ア:アプリケーションの更新命令完了時点
    更新命令(SQLのUPDATEやINSERTなど)が完了した時点では、まだトランザクションはコミットされておらず、更新内容もバッファ上にあるだけで永続化されていません。この時点で障害が発生すると更新内容は失われるため、不適切です。
  • イ:チェックポイント処理完了時点
    チェックポイント処理は、データベースバッファ上の更新データをデータファイルに書き出し、障害回復時のロールフォワードの処理時間を短縮するために定期的または特定のタイミングで実行される処理です。トランザクションごとのコミット完了のタイミングとは異なるため、不適切です。
  • ウ:ログバッファへのコミット情報書込み完了時点
    ログバッファは揮発性メモリ(主記憶)上に存在するため、ログバッファに書き込んだだけの状態でシステム障害(停電やOSクラッシュなど)が発生すると、コミット情報が消失し、最新の状態に復旧できなくなります。したがって、不適切です。
  • エ:ログファイルへのコミット情報書込み完了時点
    不揮発性記憶装置上のログファイルへの書き込みが完了すれば、その後にシステム障害が発生してもログから復旧(ロールフォワード)が可能となるため、コミット処理を完了とするタイミングとして適切です。

Spineチーム