平成31年度 春期 午前Ⅱ 問10
トランザクション処理
共有ロックに関する問題
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 | ― | ― | ― |
〔トランザクションの待ちグラフ〕:
b → a a → d c → d
- アT1
- イT2
- ウT3
- エT4
答えと解説を見る
✓ これが正解イT2
解説
T4から待たれ、自分はT1を待つ位置にあるのはT2です。
スケジュールを順に追い、誰が誰のアンロックを待つかを洗い出します。t5でT4がBを更新しようとしますが、Bにはt2でT2が共有ロックを掛けているので、T4はT2を待ちます(T4→T2)。t7のT2によるCの参照は共有ロックどうしなので待ちませんが、t8でT2がCを更新しようとすると、t6でT1が掛けたCの共有ロックがあるので、T2はT1を待ちます(T2→T1)。t9でT3がAを更新しようとすると、t1でT1が掛けたAの共有ロックがあるので、T3はT1を待ちます(T3→T1)。待ちグラフはT4→T2、T2→T1、T3→T1となり、二本の矢印を受けるdがT1、dへ向かいつつbから矢印を受けるaがT2です。矢印を受ける数と出す数で、ノードを一つずつ特定していくのが手順です。
ほかの選択肢はなぜ違うのか
- アT1:T1はAとCに共有ロックを掛けたまま、誰も待たずにコミットしようとしています。矢印を一本も出さず、T2とT3の二つから矢印を受けるので、グラフでは二本の矢印が集まるdに当たります。
- ウT3:T3はt9でAを更新しようとしてT1を待つだけで、他のトランザクションからは待たれていません。矢印を一本出すだけで受けない位置なので、dへ向かう二本のうち、bから矢印を受けないcに当たります。
- エT4:T4はt5でBを更新しようとしてT2を待ちますが、T4を待つトランザクションはありません。矢印を一本出すだけで受けない位置で、出した先は矢印を二本受けるdではなくaなので、bに当たります。
この問題の用語
- スケジュール作業の順序と日程を決めた計画のことをいいます。作業の前後関係から日程を組み立てるには、PERTが向いています。
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問16(スケジュール)
- 令和5年度 秋期 午前Ⅱ 問17(スケジュール)
- 令和2年度 10月 午前Ⅱ 問11:直列化可能性に関する問題(スケジュール)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)