トランザクション処理 (全65問中62問目)
No.62
チェックポイントを取得するDBMSにおいて,図のような経過時間でシステム障害が発生し,前進復帰によって障害回復を行った。前進復帰後のa,bの値は幾つか。ここで,Tn は長方形の左右両端がそれぞれトランザクションの開始と終了を表し,長方形内の記述は処理内容を表す。T1開始前のa,bの初期値は0とする。
出典:平成17年秋期 問69
- [出題歴]
- ソフトウェア開発技術者 H20秋期 問67
分類
テクノロジ系 » データベース » トランザクション処理
正解
ウ
解説
DBMSは、ディスクに対する入出力効率を向上させるために、トランザクションの更新をメモリ上のバッファとログファイルに記憶しておき、一定の間隔ごとにまとめてディスクに反映させるという方式をとっています。このディスクと同期を取るタイミングをチェックポイントといいます。トランザクションがコミットされたとき、ログファイルは同時に書き出されますが、ディスクへの反映はチェックポイントを待つという関係になっています。
システム障害が発生すると、チェックポイント以降にコミットされたトランザクションがディスクに反映されていないため、更新後ログを使用してチェックポイントから障害発生直前の状態までのコミットをディスクに反映します。この処理を前進復帰(ロールフォワード)といいます。
また障害発生時にコミットされていないトランザクションは、ACID特性の原子性に基づきトランザクションが一切行われていない状態に戻す必要があるので、更新前ログを使用してトランザクション開始時点の状態に戻します。この処理を後退復帰(ロールバック)といいます。
図の時間経過に沿った処理の流れは次のようになります。
システム障害が発生すると、チェックポイント以降にコミットされたトランザクションがディスクに反映されていないため、更新後ログを使用してチェックポイントから障害発生直前の状態までのコミットをディスクに反映します。この処理を前進復帰(ロールフォワード)といいます。
また障害発生時にコミットされていないトランザクションは、ACID特性の原子性に基づきトランザクションが一切行われていない状態に戻す必要があるので、更新前ログを使用してトランザクション開始時点の状態に戻します。この処理を後退復帰(ロールバック)といいます。
図の時間経過に沿った処理の流れは次のようになります。
- T1の開始
- T1をコミット:a=a+1 //a=1
- T2の開始
- チェックポイントでT1の結果をディスクに書き出す
- T2をコミット:b=b+2 //b=2
- T3の開始
- T3をコミット:a=a+3 //a=4
- T4の開始
- (システム障害の発生)
- ディスクの内容がチェックポイント時に戻る //a=1,b=0
- 更新後ログを使ってT2のコミットをディスクに反映 //b=2
- 更新後ログを使ってT3のコミットをディスクに反映 //a=4
- T4はコミットされていなかったので開始前の状態そのままにしておく