| 共有領域のロック | 共有領域のロック解除 | |
|---|---|---|
| ア | 時点(a) | 時点(c) |
| イ | 時点(a) | 時点(d) |
| ウ | 時点(b) | 時点(c) |
| エ | 時点(b) | 時点(d) |
あるトランザクション処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列に矛盾なく処理するためには,トランザクション処理のどの時点で共有領域をロックし,どの時点でロックを解除するのが適切か。 時間順: 時点(a) ① 共有領域から値を読み取り 時点(b) ② 読み取った値に数値を加算 時点(c) ③ 結果を共有領域に書き込む 時点(d)
イ. ロック:時点(a), 解除:時点(d)
共有資源を読み取って加工し書き戻す一連の処理は,他のトランザクションが間に割り込むと矛盾(Lost Update問題等)が生じます。これを防ぐため,読み取り前にロックを取得し,書き込み完了後にロックを解除する範囲が必要です。よってロックは時点(a)で取得し,解除は時点(d)です。データベースの2相ロック(2PL:Two-Phase Locking)の基本概念で,排他制御の原則です。範囲を狭めると不整合が発生するため,処理全体を排他制御で囲む必要があり,これがトランザクションのACID特性の一部を支えます。
ITパスポート 2013年 (平成25年 秋期) の過去問一覧へ戻る・問67