データベーススペシャリスト試験 2019年 午前2 問10
t₁t₁₀の時刻でスケジュールされたトランザクションT₁T₄がある。時刻t₁₀でT₁がcommitを発行する直前の、トランザクションの待ちグラフを作成した。aに当てはまるトランザクションはどれか。ここで、select(X)は共有ロックを掛けて資源Xを参照することを表し、update(X)は専有ロックを掛けて資源✕を更新することを表す。これらのロックは、commitされた時にアンロックされるものとする。また,トランザクションの待ちグラフの矢印は、Tᵢ→Tⱼとしたとき、Tⱼがロックしている資源のアンロックを、Tᵢが待つことを表す。

ア:
イ:(正解)
ウ:
エ:
解説
トランザクションの待ちグラフにおけるノードaの特定【午前2 解説】
要点まとめ
- 結論:ノードaはトランザクションT₂に対応する。
- 根拠:待ちグラフの矢印は「待つ側→待たれる側」であり、T₂が他のトランザクションのロック解除を待っている構造から判断できる。
- 差がつくポイント:ロックの種類(共有・専有)とアンロックのタイミング、待ちグラフの矢印の意味を正確に理解することが重要。
正解の理由
待ちグラフの矢印は「Tᵢ→Tⱼ」の形で、TᵢがTⱼのロック解除を待っていることを示します。図では、aからbへ矢印があり、aはbのロック解除を待つトランザクションです。スケジュールから、T₂はCに対して共有ロックを持ち、T₁がCの更新(専有ロック)を行うために待っている状況が読み取れます。これにより、aはT₂であると特定できます。
よくある誤解
待ちグラフの矢印の向きを逆に解釈し、待たれている側を待つ側と誤認することが多いです。ロックの種類と解除タイミングも混同しやすいポイントです。
解法ステップ
- スケジュール表から各トランザクションのロック取得と更新操作を確認する。
- 待ちグラフの矢印の意味を「待つ側→待たれる側」と理解する。
- 各トランザクションがどの資源のロックを保持し、どの資源のロック解除を待っているかを整理する。
- 矢印のつながりからノードaがどのトランザクションかを推定する。
- 矛盾がないか再確認し、正解を決定する。
選択肢別の誤答解説ステップ
- ア(T₁):T₁はcommit直前でロックを保持している側であり、待ちグラフの待つ側ではない。
- イ(T₂):T₂はCの共有ロックを持ち、T₁の更新を待っているためノードaに該当する。
- ウ(T₃):T₃はAの更新を行っており、待ちグラフの矢印の位置と合わない。
- エ(T₄):T₄はBの更新を行っているが、待ちグラフの矢印の関係に合致しない。
補足コラム
待ちグラフはデッドロック検出に用いられ、矢印の向きとノードの意味を正確に理解することが重要です。共有ロックは複数トランザクションが同時に保持可能ですが、専有ロックは排他制御のため待ちが発生します。commit時にロックが解除される点も押さえておきましょう。
FAQ
Q: 待ちグラフの矢印はどちらが待っていることを示しますか?
A: 矢印は「待つ側→待たれる側」を示し、矢印の出発点が待っているトランザクションです。
A: 矢印は「待つ側→待たれる側」を示し、矢印の出発点が待っているトランザクションです。
Q: 共有ロックと専有ロックの違いは何ですか?
A: 共有ロックは複数トランザクションが同時に保持可能で読み取り用、専有ロックは更新用で排他制御のため単独保持です。
A: 共有ロックは複数トランザクションが同時に保持可能で読み取り用、専有ロックは更新用で排他制御のため単独保持です。
関連キーワード: トランザクション管理, 待ちグラフ, ロック制御, デッドロック, 共有ロック, 専有ロック