トランザクション処理(全62問中45問目)

チェックポイントを取得するDBMSにおいて,図のような経過時間でシステム障害が発生し,前進復帰によって障害回復を行った。前進復帰後のa,bの値は幾つか。ここで,Tn は長方形の左右両端がそれぞれトランザクションの開始と終了を表し,終了時にCOMMITを行う。また,長方形内の記述は処理内容を表す。T1開始前のa,bの初期値は0とする。
67.gif

出典:平成20年秋期 問67

67a.gif
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:トランザクション処理
解説
DBMSは、ディスクに対する入出力効率を向上させるために、トランザクションの更新をメモリ上のバッファとログファイルに記憶しておき、一定の間隔ごとにまとめてディスクに反映させるという方式をとっています。このディスクと同期を取るタイミングをチェックポイントといいます。トランザクションがコミットされたとき、ログファイルは同時に書き出されますが、ディスクへの反映はチェックポイントを待つという関係になっています。

システム障害が発生すると、チェックポイント以降にコミットされたトランザクションがディスクに反映されていないため、更新ログを使用してチェックポイントから障害発生直前の状態までのコミットをディスクに反映します。この処理を前進復帰(ロールフォワード)といいます。
また障害発生時にコミットされていないトランザクションは、ACID特性の原子性に基づきトランザクションが一切行われていない状態に戻す必要があるので、更新ログを使用してトランザクション開始時点の状態に戻します。この処理を後退復帰(ロールバック)といいます。

図の時間経過に沿った処理の流れは次のようになります。
  1. T1の開始
  2. T1をコミット:a=a+1 //a=1
  3. T2の開始
  4. チェックポイントでT1の結果をディスクに書き出す
  5. T2をコミット:b=b+2 //b=2
  6. T3の開始
  7. T3をコミット:a=a+3 //a=4
  8. T4の開始
  9. (システム障害の発生)
  10. ディスクの内容がチェックポイント時に戻る //a=1,b=0
  11. 更新後ログを使ってT2のコミットをディスクに反映 //b=2
  12. 更新後ログを使ってT3のコミットをディスクに反映 //a=4
  13. T4はコミットされていなかったので開始前の状態そのままにしておく
したがって、前進復帰後のaの値は4,bの値は2になります。

この問題の出題歴


Pagetop