コミット処理|情報処理安全確保支援士試験 令和2年 秋期午前Ⅱ試験 問21

出典:令和2年秋期 午前Ⅱ 問21 分野:データベース / トランザクション処理
DBMSがトランザクションのコミット処理を完了するタイミングはどれか。
  • ア:アプリケーションの更新命令完了時点
  • イ:チェックポイント処理完了時点
  • ウ:ログバッファへのコミット情報書込み完了時点
  • エ:ログファイルへのコミット情報書込み完了時点
解説

データベースでは、COMMITを実行しただけで、更新内容がすぐにディスクなどの補助記憶装置へ書き込まれるとは限りません。

理由は、データベースの更新は、いったん主記憶上で行われるからです。補助記憶装置への書込みは、効率化のために、チェックポイントなどのタイミングでまとめて行われます。

  1. トランザクションを開始する
  2. データベースから主記憶にデータを読み込む
  3. 主記憶上のデータを更新する
  4. COMMITにより、トランザクションの完了を指示する
  5. チェックポイントなどのタイミングで、更新内容を補助記憶装置に書き込む

ここで注意したいのは、主記憶は電源が切れると内容が失われる揮発性の記憶装置だという点です。

もしCOMMIT後、更新データがまだ補助記憶装置に書き込まれる前に障害が発生すると、主記憶上の更新内容は失われる可能性があります。これでは、コミット済みの更新結果を失わないというトランザクションの永続性を守れません。

そこで使われるのがWALプロトコルです。WALでは、実際のデータを書き込む前に、まず更新内容をログとして安定した記憶装置に書き込みます。

ポイント 内容
COMMIT実行 トランザクションの完了を指示するが、更新データ本体がすぐ補助記憶装置に書き込まれるとは限らない
更新後ログ 更新内容を再現するための記録。これが安定記憶装置に書き込まれることが重要
コミット完了の判断 更新後ログが物理的な記憶装置に書き込まれた時点で、コミット完了とみなす

ログが安定記憶装置に残っていれば、障害が発生しても、そのログを使って更新内容を再現できます。

つまり、トランザクションのコミットは、「COMMIT文を発行した瞬間」ではなく、「更新内容を再現できるログが安全な記憶装置に書き込まれた時点」で完了すると考えると分かりやすいです。

したがって、が適切です。

❌他選択肢が誤りの理由
ア:アプリケーションの更新命令完了時点
⇒アプリケーションの更新命令が完了しても、トランザクション全体が確定したとは限りません。DBMSでは、コミットによって更新内容を確定し、障害時にも復旧できる状態にする必要があります。
イ:チェックポイント処理完了時点
⇒チェックポイントは、データベースの回復処理を効率化するために、一定時点の状態を記録する処理です。個々のトランザクションのコミット完了時点を示すものではありません。
ウ:ログバッファへのコミット情報書込み完了時点
⇒ログバッファは一時的な記憶領域です。ログバッファに書き込んだだけでは、システム障害時にコミット情報が失われるおそれがあります。コミット処理の完了には、ログファイルへの書込みが必要です。
TSUNAGARU-ADVICE

まず押さえたいこと

DBMSでトランザクションのコミット処理が完了するのは、コミット情報がログファイルに書き込まれた時点です。障害が発生しても回復できるように、永続的な記憶媒体上のログに記録されていることが重要になります。

迷ったときの判断軸

アプリケーションの更新命令が完了しても、まだ障害時に復旧できる状態とは限りません。また、ログバッファはメモリ上の一時領域なので、そこに書き込まれただけでは不十分です。チェックポイント処理ではなく、ログファイルへのコミット情報の書込み完了を基準に判断しましょう。

科目Bにつなげるために

科目Bでは、障害発生時にどのトランザクションをロールフォワードし、どれをロールバックするかを問われることがあります。コミット済みかどうかは、ログに確実に記録されているかで判断するという考え方を押さえておきましょう。※DB関連試験向け