ITパスポート試験 ITパスポート 2013年 (平成25年 秋期)67: あるトランザクション処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列

ITパスポート 2013年 (平成25年 秋期)
Q 6767 / 100
ある処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列に矛盾なく処理するためには,トランザクション処理のどの時点で共有領域をロックし,どの時点でロックを解除するのが適切か。 時間順: 時点(a) ① 共有領域から値を読み取り 時点(b) ② 読み取った値に数値を加算 時点(c) ③ 結果を共有領域に書き込む 時点(d)
共有領域のロック共有領域のロック解除
時点(a)時点(c)
時点(a)時点(d)
時点(b)時点(c)
時点(b)時点(d)
この問の正解率:82.08%(1,049件)
この問題の本文・選択肢・正解・解説(展開)

問題本文

あるトランザクション処理は,①共有領域から値を読み取り,②読み取った値に数値を加算し,③結果を共有領域に書き込む手順からなっている。複数のトランザクションを並列に矛盾なく処理するためには,トランザクション処理のどの時点で共有領域をロックし,どの時点でロックを解除するのが適切か。 時間順: 時点(a) ① 共有領域から値を読み取り 時点(b) ② 読み取った値に数値を加算 時点(c) ③ 結果を共有領域に書き込む 時点(d)

選択肢

  • .ロック:時点(a), 解除:時点(c)
  • .ロック:時点(a), 解除:時点(d)
  • .ロック:時点(b), 解除:時点(c)
  • .ロック:時点(b), 解除:時点(d)

正解

. ロック:時点(a), 解除:時点(d)

解説

共有資源を読み取って加工し書き戻す一連の処理は,他のトランザクションが間に割り込むと矛盾(Lost Update問題等)が生じます。これを防ぐため,読み取り前にロックを取得し,書き込み完了後にロックを解除する範囲が必要です。よってロックは時点(a)で取得し,解除は時点(d)です。データベースの2相ロック(2PL:Two-Phase Locking)の基本概念で,排他制御の原則です。範囲を狭めると不整合が発生するため,処理全体を排他制御で囲む必要があり,これがトランザクションのACID特性の一部を支えます。

選択肢ごとの解説

  • .ロック解除を時点(c,書き込み完了直後)にすると,書き込みからコミットまでの微小時間に他処理が読みに来る可能性があり,完全な整合性確保には不十分。読み取りから書き込み完了まで全体を囲む必要があるため誤り。
  • .正解。読み取り前(時点a)にロックし,書き込み完了後(時点d)に解除する範囲が正しい。トランザクション全体を排他制御で囲み,Lost Update問題を防ぐのが2相ロックの基本パターン。
  • .読み取り後(時点b)にロックを取得すると,その間の読み取り値が他処理の変更を反映していない不整合データになる可能性があり誤り。読み取り前にロックが必要で,順序が逆。
  • .読み取り後(時点b)のロックでは,読み取り段階で他処理が値を変更している可能性があり不整合を防げないため誤り。読み取り含めて排他が必要で,読み取り後のロックでは手遅れ。

ITパスポート 2013年 (平成25年 秋期)過去問一覧へ戻る・問67