令和4年度 春期 システムアーキテクト試験 午前II 問24
〜の時刻でスケジュールされたトランザクション 〜がある。時刻 で が commit を発行する直前の,トランザクションの待ちグラフを作成した。空欄 a に当てはまるトランザクションはどれか。ここで,select (X) は共有ロックを掛けて資源 X を参照することを表し,update (X) は専有ロックを掛けて資源 X を更新することを表す。これらのロックは,commit された時にアンロックされるものとする。また,トランザクションの待ちグラフの矢印は, としたとき, がロックしている資源のアンロックを, が待つことを表す。

図の説明テキスト
〔トランザクションのスケジュール〕
| 時刻 | トランザクション | トランザクション | トランザクション | トランザクション |
|---|---|---|---|---|
| select (A) | - | - | - | |
| - | select (B) | - | - | |
| - | - | select (B) | - | |
| - | - | - | select (A) | |
| - | - | - | update (B) | |
| select (C) | - | - | - | |
| - | select (C) | - | - | |
| - | update (C) | - | - | |
| - | - | update (A) | - | |
| commit | - | - | - |

図の説明テキスト
〔トランザクションの待ちグラフ〕
ノード a、b、c、d からなる有向グラフ。
矢印の向きは以下の通り。
・b から a への矢印
・a から d への矢印
・b から c への矢印
・c から b への矢印
・c から d への矢印
・d から c への矢印
解答・解説
正解: イ.
問題で与えられたトランザクションのスケジュールをもとに、各時刻におけるロックの状態と、競合による待ち状態(矢印)を整理します。
共有ロック(select)同士は競合せず同時にロックできますが、専有ロック(update)は他の共有ロックや専有ロックと競合し、アンロックを待つことになります。
- 時刻 〜 のロック状態
各トランザクションが以下の共有ロックを獲得します。すべて競合せず成功します。
- : が資源Aに共有ロック
- : が資源Bに共有ロック
- : が資源Bに共有ロック
- : が資源Aに共有ロック
時刻 の待ち状態
が資源Bに専有ロック(update (B))を要求します。すでに と が資源Bに共有ロックを掛けているため、 は待ち状態となります。
これにより、 および の矢印が発生します。時刻 〜 のロック状態
以下の共有ロックを獲得し、成功します。
- : が資源Cに共有ロック
- : が資源Cに共有ロック
時刻 の待ち状態
が資源Cに専有ロック(update (C))を要求します。すでに が資源Cに共有ロックを掛けているため、 は待ち状態となります(自身の共有ロックは待機対象に含めません)。
これにより、 の矢印が発生します。時刻 の待ち状態
が資源Aに専有ロック(update (A))を要求します。すでに と が資源Aに共有ロックを掛けているため、 は待ち状態となります。
これにより、 および の矢印が発生します。グラフの依存関係とノードの特定
ここまでで発生した待ち状態(矢印)は以下の5つです。
各トランザクションから出る矢印(自分が待っている相手)の数を整理します。
- :出ていく矢印 0本
- :出ていく矢印 1本( へ)
- :出ていく矢印 2本(, へ)
- :出ていく矢印 2本(, へ)
また、 と は互いに待ち合っており、双方向の矢印が存在します。
図表のグラフの構造と照らし合わせます。
- ノード d は他のノードへの矢印が出ていないため、 に対応します。
- ノード a は d()へ1本だけ矢印を出しているため、 に対応します。
- ノード b と c は互いに矢印を出し合っているため、 または です。b は a()へ矢印を出しているため 、c は d()へ矢印を出しているため に対応します。
したがって、空欄 a に当てはまるトランザクションは となり、正解は「イ」です。
各選択肢の解説
- ア():他のトランザクションを待っていないため、ノード d に該当します。
- イ():正解です。ノード a に該当します。
- ウ(): と を待っているため、ノード c に該当します。
- エ(): と を待っているため、ノード b に該当します。