前回の勉強内容
勉強のきっかけになった問題
DBMSにおいて,デッドロックを検出するために使われるデータ構造はどれか。
- (正解)待ちグラフ
- 資源割当表
- 時刻印順管理表
- トランザクションの優先順管理表
出典 : データベーススペシャリスト試験 平成30年春期 午前Ⅱ 問16

待ちグラフは、どのトランザクションがどのトランザクションをロックしているかを表す
待ちグラフは、
トランザクション1つ1つをノードとして書きます。
なので以下の場合はA~Dの4トランザクションがあります。

トランザクションBが、トランザクションAがロックしているデータのリソースのロック解除を待っている場合はB->Aで矢印を書きます。

トランザクションA~Dに関する待ちグラフのうち、デッドロックが発生しているものはどれか。ここで、待ちグラフの矢印は、X→Yのとき、トランザクションXはトランザクションYがロックしている資源のアンロックを待っていることを表す。
(正解)
出典 : 情報セキュリティスペシャリスト試験 平成26年秋期 午前Ⅱ 問21
以下の待ちグラフでは
「Aがロック解除」->「Bが再開してロック解除」->「Cが再開してロック解除」->「Dが再開」
と動くことができます。

しかし、以下の待ちグラフでは
「Dがロック解除」しても「AはCのロック解除待ち」「CはBのロック解除待ち」「BはAのロック解除待ち」
となってデットロックになっていることがわかります。

トランザクションA~Gの待ち行列において、永久待ちの状態になっているトランザクション全てを列挙したものはどれか。 ここで、待ちグラフのX →Y は、トランザクションXはトランザクションYがロックしている資源のアンロックを待っていることを表す。
- A, B, C, D
- B, C, D
- (正解)B, C, D, F
- C, D, E, F, G
出典 : 応用情報技術者試験 平成29年秋期 午前 問29
この問題では、端っこから考えて
「Aがロック解除」しても再開できるトランザクションはありません。

「Gがロック解除」->「Eが再開してロック解除」まではできますが、その先は再開できるトランザクションがありません。

結果、真ん中部分のトランザクションがデットロックとして残ります。

t1~t10の時刻でスケジュールされたトランザクションT1~T4がある。時刻t10でT1がcommitを発行する直前の,トランザクションの待ちグラフを作成した。aに当てはまるトランザクションはどれか。ここで,select(X)は共有ロックをかけて資源Xを参照することを表し,update(X)は専有ロックをかけて資源Xを更新することを表す。これらのロックは,commitされるまでアンロックされないものとする。また,トランザクションの待ちグラフの矢印は,Ti→Tjとしたとき,Tjがロックしている資源のアンロックを,Tiが待つことを表す。
〔トランザクションのスケジュール〕
時刻 T1 T2 T3 T4 t1 select(A) - - - t2 - select(B) - - t3 - - select(A) - t4 - - - select(B) t5 - - - update(B) t6 select(C) - - - t7 - select(C) - - t8 - update(C) - - t9 - - update(A) - t10 commit - - -
- T1
- (正解)T2
- T3
- T4
出典 : データベーススペシャリスト試験平成25年春期 午前Ⅱ 問10
「t5」で[T4]が[B]を占有ロックするために「T2の共有ロック解除待ち」になります。

「t8」で[T2]が[C]を占有ロックするために「T1の共有ロック解除待ち」になります。

「t9」で[T3]が[A]を占有ロックするために「T1の共有ロック解除待ち」になります。

なので待ちグラフはこんな感じになります。





