平成20年春期試験問題 午前問66

三つのトランザクションT1,T2,T3が,①~⑪の順序でデータa,bに対する処理を行った場合,デッドロックとなるのはどの時点か。ここで,DBMSはREADの直前に共有ロック,UPDATEの直前に占有ロックをかけ,ROLLBACK又はCOMMITですべてのロックを解除する。
66.gif

正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:トランザクション処理
解説
デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうためプロセスの続行ができなくなってしまいます。
66a.gif
共有・占有の2つのロックが出てきますので違いを把握しておきましょう。
共有ロック
データを読込むときに使うロックで、この状態の場合は他のトランザクションによる更新処理ができなくなる。
占有ロック
データを更新するときに使うロックで、この状態の場合は他のトランザクションからは読込みや更新ができなくなる。
資源にかけられるロックに注目して状態の推移を見ていきましょう。
  1. T1が a を共有ロックする。
  2. T2が b を占有ロックする。
  3. T1が b を共有ロックしようとするが、T2によって専有ロック中なので待ち状態になる。
  4. T2がROLLBACKで b の占有ロックを解除する。その後、T1が b を共有ロックする。
  5. T3が b を共有ロックする(b は共有ロックなので別トランザクションからの読込みは可能)。
  6. T3が更新処理に伴う占有ロックを a にかけようとするが、T1が a を共有ロック中なので待ち状態となる。
  7. T1が更新処理に伴う占有ロックを b にかけようとするが、T3が b を共有ロック中なので待ち状態となる。
この時点で、T1はT3読込み中の b を、T3はT1読込み中の a が解放されるのを互いに待つ状態になり、2つのトランザクションの間でデッドロックが発生します。したがって正解は⑦の時点ということになります。

この問題の出題歴


Pagetop