平成20年 春期 ソフトウェア開発技術者 午前 問66

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

T1
@ READ a

B READ b



F UPDATE b

H UPDATE a
I COMMIT


T2

A UPDATE b

C ROLLBACK








T3




D READ b
E UPDATE a

G UPDATE b


J COMMIT

 ア  E
 イ  F
 ウ  G
 エ  H


答え イ


解説
@〜Jの処理を行ったときのデータa、bの状態を見ていく。

処理の内容 データaの状態 データbの状態
@ T1が「READ a」でデータaを共有ロック T1が共有ロック
A T2が「UPDATE b」でデータbを占有ロック T1が共有ロック T2が占有ロック
B T1が「READ b」でデータbを共有ロックを行いたいが、データbはT2が占有ロックしているので、T1は資源解放待ち T1が共有ロック T2が占有ロック
C T2が「ROLLBACK」でデータbの占有ロックを解除、T1がデータbの解放待ちなので共有ロック T1が共有ロック T1が共有ロック
D T3が「READ b」でデータbを共有ロック
(データbはT1が共有ロック状態なので共有ロックは可)
T1が共有ロック T1、T3が共有ロック
E T3が「UPDATE a」でデータaの占有ロックを行いたいが、データaはT1が共有ロックしているので、T3はデータaの資源解放待ち T1が共有ロック T1、T3が共有ロック
F T1が「UPDATE b」でデータbの占有ロックを行いたいが、データbはT3も共有ロックしているので、T1はデータbの資源解放待ち T1が共有ロック T1、T3が共有ロック
Fの処理でT1とT3が資源解放待ち状態になってしまいデッドロックになる。(イ)


キーワード
・デッドロック

キーワードの解説

戻る 一覧へ 次へ