平成29年春期試験午前問題 午前Ⅰ 問8

午前Ⅰ 問8解説へ
トランザクションAとBが,共通の資源であるテーブルaとbを表に示すように更新するとき,デッドロックとなるのはどの時点か。ここで,表中の①~⑧は処理の実行順序を示す。また,ロックはテーブルの更新直前にテーブル単位で行い,アンロックはトランザクションの終了後に行うものとする。
am1/29.gif

正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:トランザクション処理
デッドロックは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスの必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態に陥ってしまうことをいいます。
テーブルのロックに着目して処理を流れを見ていきましょう。
  1. ③でトランザクションAがテーブルaをロックする。
    am1/29_1.gif
  2. ④でトランザクションBがテーブルbをロックする。
    am1/29_2.gif
  3. ⑤でトランザクションAがテーブルbをロックしようとするが、既にトランザクションBにロックされているのでトランザクションAは待ち状態となる。
    am1/29_3.gif
  4. ⑥でトランザクションBがテーブルaをロックしようとするが、既にトランザクションAにロックされているのでトランザクションBは待ち状態となる。
    am1/29_4.gif
この状態ではトランザクションAはテーブルbのロック解放を待ち、トランザクションBはテーブルaのロック解放を待っているので、双方のトランザクションの進行がストップしてしまいます。したがってデッドロックが成立するのは⑥の時点です。

Pagetop