IPA過去問ドリル

平成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 | - | - | - 〔トランザクションの待ちグラフ〕待ちグラフのノードa~dは,それぞれT1~T4のいずれかに対応する(図を参照)。ノード間の矢印は,b→a,a→d,c→dである。

平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10の図

出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10

正解:イ

解説

スケジュールを時系列に追うと,t1でT1がAをselect(共有ロック),t2でT2がBをselect,t3でT3もAをselect(共有ロックは複数トランザクションで共有可能),t4でT4がBをselectします。t5でT4がBをupdate(専有ロックへ)しようとしますが,T2がBに共有ロックを掛けたままなので,T4はT2のアンロック待ちになります(T4→T2)。t6でT1がCをselectし,t7でT2がCをselectし,t8でT2がCをupdateしようとしますが,T1がCに共有ロックを掛けたままなので,T2はT1のアンロック待ちになります(T2→T1)。t9でT3がAをupdateしようとしますが,T1・T3ともにAに共有ロックを掛けている状態でT3が専有ロックを要求するため,T3はT1のアンロック待ちになります(T3→T1)。図の待ちグラフでは,bからa,aからd,cからdへの矢印が示されています。ここまでの分析でT4→T2という待ち関係が確定していることから,設問の待ちグラフのb→aの矢印はT4→T2に対応すると考えられ,これによりbがT4,aがT2に対応します。したがって,aに当てはまるトランザクションはT2です。

選択肢ごとの解説

  • 誤り。T1はt10でcommitを発行しようとする側のトランザクションであり,他のトランザクションの資源アンロックを待つ立場(グラフ上でaに対応する側)には該当しません。
  • 正しい。t5でT4がBをupdateしようとした際,Bに共有ロックを掛けているT2のアンロックを待つ関係(T4→T2)が生じており,これが待ちグラフのb→aに対応するため,aはT2です。
  • 誤り。T3はt9でAをupdateしようとしてT1の待ちになるトランザクション(グラフ上のc又はそれに類する末端ノードに対応)であり,他から矢印を受けるaの位置には対応しません。
  • 誤り。T4は待ちグラフ上で他のトランザクション(T2)のアンロックを待つ側(bに対応するノード)であり,aに対応するトランザクションではありません。
データベーススペシャリストの過去問を演習モードで解く