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

ア:
イ:(正解)
ウ:
エ:
解説
トランザクションの待ちグラフにおける待ち関係の特定【午前2 解説】
要点まとめ
- 結論:待ちグラフのノード「a」に該当するトランザクションはT₂です。
- 根拠:待ちグラフの矢印は「待つ側→ロック保持側」を示し、T₂が他トランザクションのロック解除を待っているためです。
- 差がつくポイント:ロックの種類(共有・専有)とアンロックのタイミングを正確に理解し、待ち関係を正しく読み解くことが重要です。
正解の理由
待ちグラフの矢印「b → a」は、ノードbがノードaのロック解除を待っていることを示します。
図のトランザクションと待ちグラフの対応は、bがT₂、aがT₂以外のどれかと考えられますが、T₂が他のトランザクションのロック解除を待つ状況を確認すると、T₂がaに該当します。
具体的には、T₂は時刻t₈でupdate(C)を行い専有ロックを取得しようとしますが、T₁がt₆でselect(C)の共有ロックを保持しているため、T₂はT₁のアンロックを待つ状態です。
この待ち関係が「b → a」の矢印で表され、aはT₁ではなくT₂自身のノードであるため、aはT₂を指します。
したがって、選択肢の中でaに当てはまるのはイ: T₂です。
図のトランザクションと待ちグラフの対応は、bがT₂、aがT₂以外のどれかと考えられますが、T₂が他のトランザクションのロック解除を待つ状況を確認すると、T₂がaに該当します。
具体的には、T₂は時刻t₈でupdate(C)を行い専有ロックを取得しようとしますが、T₁がt₆でselect(C)の共有ロックを保持しているため、T₂はT₁のアンロックを待つ状態です。
この待ち関係が「b → a」の矢印で表され、aはT₁ではなくT₂自身のノードであるため、aはT₂を指します。
したがって、選択肢の中でaに当てはまるのはイ: T₂です。
よくある誤解
待ちグラフの矢印の向きを逆に理解し、待たれている側を待つ側と誤認することが多いです。
また、共有ロックと専有ロックの違いを混同し、待ち関係を誤って判断するケースもあります。
また、共有ロックと専有ロックの違いを混同し、待ち関係を誤って判断するケースもあります。
解法ステップ
- 各トランザクションのロック取得と解放のタイミングを時系列で整理する。
- 共有ロック(select)と専有ロック(update)の違いを確認し、どのトランザクションがどの資源をロックしているか把握する。
- 待ちグラフの矢印の意味(待つ側→待たれる側)を正確に理解する。
- 矢印の向きから、どのトランザクションがどのトランザクションのロック解除を待っているかを特定する。
- ノードラベルとトランザクションを対応付け、aに該当するトランザクションを選ぶ。
選択肢別の誤答解説ステップ
- ア: T₁
T₁はt₁₀でcommit直前であり、他トランザクションから待たれている側であるためaには該当しません。 - イ: T₂
正解。T₂は専有ロックを取得しようとして待ち状態にあり、待ちグラフのaに該当します。 - ウ: T₃
T₃はupdate(A)をt₉に行い、待ち状態はないためaには該当しません。 - エ: T₄
T₄はupdate(B)をt₅に行い、待ち状態はないためaには該当しません。
補足コラム
待ちグラフはデッドロック検出に用いられ、矢印が循環するとデッドロックが発生します。
共有ロックは複数トランザクションが同時に取得可能ですが、専有ロックは単独でしか取得できず、待ちが発生しやすい点に注意が必要です。
共有ロックは複数トランザクションが同時に取得可能ですが、専有ロックは単独でしか取得できず、待ちが発生しやすい点に注意が必要です。
FAQ
Q: 待ちグラフの矢印はどちらが待っていることを示しますか?
A: 矢印は「待つ側→待たれる側」を示し、矢印の先のトランザクションのロック解除を待っています。
A: 矢印は「待つ側→待たれる側」を示し、矢印の先のトランザクションのロック解除を待っています。
Q: 共有ロックと専有ロックの違いは何ですか?
A: 共有ロックは複数トランザクションが同時に取得可能ですが、専有ロックは単独でしか取得できず、更新時に使用されます。
A: 共有ロックは複数トランザクションが同時に取得可能ですが、専有ロックは単独でしか取得できず、更新時に使用されます。
関連キーワード: トランザクション管理, 待ちグラフ, ロック制御, デッドロック, 共有ロック, 専有ロック