情報処理安全確保支援士 2025年 秋期 午前2 問21
問題文
DBMSがトランザクションのコミット処理を完了するタイミングはどれか。
選択肢
ア:アプリケーションプログラムによるデータ更新命令完了時点
イ:チェックポイント処理完了時点
ウ:ログバッファへのコミット情報書込み完了時点
エ:ログファイルへのコミット情報書込み完了時点(正解)
トランザクションのコミット完了のタイミング【午前2 解説】
要点まとめ
- 結論:トランザクションのコミット完了は、コミット情報(コミットログ)がログファイルへ書き込まれ安定記憶へ確実に格納された時点です。
- 根拠:耐久性(Durability)の保証のため、コミット応答はログレコードがメモリ上ではなくディスクなどの永続媒体にフラッシュされたことを前提とします。
- 差がつくポイント:ログバッファへの書込みは一時的で、チェックポイントは後処理。実務では fsync 等による同期書込みや group commit の有無が性能と保証を左右します。
正解の理由
正解: エ
トランザクションの「コミット完了」とは、Durability を満たすためにコミットログ(コミットを示すログレコード)が永続的な記憶装置(ログファイル)へ書き込まれ、破損や障害が起きても復旧可能な状態になったことを指します。ログバッファは主記憶上の一時領域であり、そこへの書込み完了だけでは電源断やクラッシュ時に消失する可能性があります。チェックポイント処理はデータページの遅延書込みや復旧コストの低減を目的とした別工程であり、コミット応答の同期条件とは異なります。したがって「ログファイルへのコミット情報書込み完了(エ)」が正しい判断基準です。
トランザクションの「コミット完了」とは、Durability を満たすためにコミットログ(コミットを示すログレコード)が永続的な記憶装置(ログファイル)へ書き込まれ、破損や障害が起きても復旧可能な状態になったことを指します。ログバッファは主記憶上の一時領域であり、そこへの書込み完了だけでは電源断やクラッシュ時に消失する可能性があります。チェックポイント処理はデータページの遅延書込みや復旧コストの低減を目的とした別工程であり、コミット応答の同期条件とは異なります。したがって「ログファイルへのコミット情報書込み完了(エ)」が正しい判断基準です。
よくある誤解(2〜3 行)
- 「アプリの更新命令完了=コミット完了」とする誤解:更新命令は単に処理の完了を意味し、永続化(ディスクへのフラッシュ)を伴わないことが多いです。
- 「チェックポイント完了でコミット保証」とする誤解:チェックポイントは復旧負荷を下げる処理であり、個々のコミットの耐久性保証とは別です。
解法ステップ
- ACID のうち D(Durability:永続性)がコミット応答で何を要求するかを確認する。
- メモリ上のログバッファとディスク上のログファイルの違い(揮発性か否か)を意識する。
- チェックポイント処理の目的(復旧効率化や古いログの破棄)を理解する。
- 「コミット完了」とは、障害後もトランザクション効果が残ることを保証できる状態であると定義する。
- 以上から、ログファイル(永続媒体)への書込み完了が必要であると結論づける。
選択肢別の誤答解説
-
ア: アプリケーションプログラムによるデータ更新命令完了時点
誤り。アプリが更新処理を終えても、その変更やコミット情報がメモリ上だけで完結している場合、電源断で消失する恐れがあります。耐久性が保証されません。 -
イ: チェックポイント処理完了時点
誤り。チェックポイントはデータページを書き出して復旧を容易にする後処理であり、コミット完了の同期条件ではありません。コミットはチェックポイントの完了を待たずに完了しうるため不適切です。 -
ウ: ログバッファへのコミット情報書込み完了時点
誤り。ログバッファは主記憶上の一時領域で、ここへの書込みだけでは障害耐性がなく、Durability を満たしません。ディスクへのフラッシュ(同期書込み)が必要です。 -
エ: ログファイルへのコミット情報書込み完了時点
正解。コミットログが永続記憶へ確実に書き込まれた段階で、トランザクションの耐久性が保証され、コミット完了と見なされます。
補足コラム(関連知識など)
- Write-Ahead Logging(WAL)原則:データページを書き換える前に、その変更を表すログを先に永続化することで一貫性と耐久性を確保します。多くのDBMS(InnoDB、PostgreSQL 等)はこの方式を採用しています。
- ARIES アルゴリズムでは、コミット時にコミットログのフラッシュを強制し、その後にデータページの遅延書込みを行う設計が一般的です。
- 実装上の注意点:fsync や fdatasync による同期書込みはコストが高く、性能改善のために group commit(複数トランザクションのコミットログをまとめてフラッシュ)や遅延 Durability オプションが使われます。ただし遅延設定は耐久性要件に影響するため運用ポリシーに注意が必要です。
FAQ
Q: ログバッファへ書いた直後にコミット応答を返す DB はある?
A: 遅延耐久性(async commit)を設定しているシステムでは、ログをメモリに置いたまま応答するモードが存在しますが、これは耐久性を犠牲にする設計上のトレードオフです。標準的なコミット保証とは異なります。
A: 遅延耐久性(async commit)を設定しているシステムでは、ログをメモリに置いたまま応答するモードが存在しますが、これは耐久性を犠牲にする設計上のトレードオフです。標準的なコミット保証とは異なります。
Q: チェックポイントがなぜ必要か、コミットとどう関係するか?
A: チェックポイントはデータページのディスク書込みを進め、復旧時に参照すべきログ領域を限定して復旧時間を短縮します。コミット自体の耐久性を与えるものではありませんが、長期的なログ管理と性能に影響します。
A: チェックポイントはデータページのディスク書込みを進め、復旧時に参照すべきログ領域を限定して復旧時間を短縮します。コミット自体の耐久性を与えるものではありませんが、長期的なログ管理と性能に影響します。
Q: 「fsync を呼ぶ」とは具体的に何をしているのか?
A: OS に対して指定ファイルのメモリキャッシュ内容を物理ディスクへ反映させるよう要求します。これによりログレコードが実際の永続媒体に書かれ、コミットの耐久性が確保されます。
A: OS に対して指定ファイルのメモリキャッシュ内容を物理ディスクへ反映させるよう要求します。これによりログレコードが実際の永続媒体に書かれ、コミットの耐久性が確保されます。
関連キーワード: トランザクション、コミット、耐久性、WAL, ログバッファ、ログファイル、チェックポイント、ARIES, fsync, group commit

\ せっかくなら /
情報処理安全確保支援士を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

