トランザクション処理 (全50問中48問目)

No.48

三つのトランザクションT1,T2,T3が,①〜Jの順序でデータa,bに対する処理を行った場合,デッドロックとなるのはどの時点か。ここで,DBMSはREADの直前に共有ロック,UPDATEの直前に占有ロックをかけ,ROLLBACK又はCOMMITですべてのロックを解除する。
67.gif/image-size:451×269
  • [この問題の出題歴]
  • ソフトウェア開発技術者 H20春期 問66

分類

テクノロジ系 » データベース » トランザクション処理

正解

解説

デッドロックとは、共有資源を使用する2つ以上のプロセスが、互いに相手プロセスが必要とする資源を排他的に使用していて、互いのプロセスが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとプロセスは永遠に待ち状態になってしまうためプロセスの続行ができなくなってしまいます。
67a.gif/image-size:312×159
共有・占有の2つのロックが出てきますので違いを把握しておきましょう。
共有ロック
データを読込むときに使うロックで、この状態の場合は他のトランザクションによる更新処理ができなくなる。
占有ロック
データを更新するときに使うロックで、この状態の場合は他のトランザクションからは読込みや更新ができなくなる。
資源にかけられるロックに注目して状態の推移を見ていきましょう。
  1. ①T1がaを共有ロック
  2. ②T2がbを占有ロック
  3. ③T1がbを読込もうとするが、占有ロック中なので待ち状態となる。
  4. ④T2がROLLBACKでbの占有ロックを解除→T1がbを共有ロック
  5. ⑤T3がbを読込み(bは共有ロックなので読込みは可能)
  6. ⑥T3がaを更新しようとするが、共有ロック中(T1が読込み中)なので待ち状態となる。
  7. ⑦T1がbを更新しようとするが、共有ロック中(T3が読込み中)なので待ち状態となる。
ここまでで、T1はT3読込み中のbを、T3はT1読込み中のaが解放されるのを待つ状態になっているので、2つのトランザクションの間でデッドロックが発生するのは⑦の時点ということになります。
© 2010-2019 応用情報技術者試験ドットコム All Rights Reserved.

Pagetop