平成31年度 春期 データベーススペシャリスト試験 午前II 問10
2025年6月30日
【問題10】
t₁~t₁₀の時刻でスケジュールされたトランザクションT₁~T₄がある。時刻t₁₀でT₁がcommitを発行する直前の,トランザクションの待ちグラフを作成した。aに当てはまるトランザクションはどれか。ここで,select(X)は共有ロックを掛けて資源Xを参照することを表し,update(X)は専有ロックを掛けて資源Xを更新することを表す。これらのロックは,commitされるまでアンロックされないものとする。また,トランザクションの待ちグラフの矢印は,Ti→Tjとしたとき,Tjがロックしている資源のアンロックを,Tiが待つことを表す。
【解説】
ロックの基本:
- 共有ロック (Sロック): データの読み取り時に取得。他のトランザクションも共有ロックを取得可能だが、専有ロックは取得不可。
- 専有ロック (Xロック): データの更新時に取得。他のトランザクションは共有・専有ロックともに取得不可。
各時刻のロック状態:
- t₁ (T₁: select(A)): T₁がAに共有ロックを取得。
- t₂ (T₂: select(B)): T₂がBに共有ロックを取得。
- t₃ (T₃: select(A)): T₃がAに共有ロックを取得(T₁の共有ロックと共存可能)。
- t₄ (T₄: select(B)): T₄がBに共有ロックを取得(T₂の共有ロックと共存可能)。
- t₅ (T₄: update(B)): T₄がBに専有ロックを要求。T₂がBに共有ロックを保持しているため、T₄はT₂のロック解除を待つ。
- t₆ (T₁: select(C)): T₁がCに共有ロックを取得。
- t₇ (T₂: select(C)): T₂がCに共有ロックを取得(T₁の共有ロックと共存可能)。
- t₈ (T₂: update(C)): T₂がCに専有ロックを要求。T₁がCに共有ロックを保持しているため、T₂はT₁のロック解除を待つ。
- t₉ (T₃: update(A)): T₃がAに専有ロックを要求。T₁がAに共有ロックを保持しているため、T₃はT₁のロック解除を待つ。
- t₁₀ (T₁: commit): T₁がコミットし、全てのロックを解除。
待ちグラフの構築:
- T₄ → T₂: T₄はT₂が保持するBの共有ロック解除を待つ。
- T₂ → T₁: T₂はT₁が保持するCの共有ロック解除を待つ。
- T₃ → T₁: T₃はT₁が保持するAの共有ロック解除を待つ。
aに当てはまるトランザクション:
待ちグラフの構造から、T₄がT₂を待ち、T₂がT₁を待っていることがわかります。したがって、aに当てはまるトランザクションは T₂ です。
出典:平成31年度 春期 データベーススペシャリスト試験 午前II 問10