平成25年度 春期 データベーススペシャリスト試験 午前II 問10
2025年6月30日
【問題10】
t1~t10の時刻でスケジュールされたトランザクション T1~T4 がある。時刻 t10 で T1 が commit を発行する直前の、トランザクションの待ちグラフを作成した。a に当てはまるトランザクションはどれか。ここで、select (X) は共有ロックをかけて資源 X を参照することを表し、update (X) は専有ロックをかけて資源 X を更新することを示す。これらのロックは、commit されるまでアンロックされないものとする。また、トランザクションの待ちグラフの矢印は、T1→Tj としたとき、Tj がロックしている資源のアンロックを T1 が待っていることを表す。
【解説】
トランザクションの待ちグラフでは、資源に対するロックの状態とトランザクション間の依存関係が表されます。この問題で重要な点は、`select(X)`と`update(X)`の違いです。`select(X)`はリソースに対する共有ロックを意味し、他のトランザクションと共にアクセス可能です。一方、`update(X)`は専有ロックを意味し、そのリソースを占有して他のトランザクションがアクセスできなくなります。
待ちグラフは、次のように解釈できます:
– トランザクションがリソースをロックしている間、他のトランザクションがそのリソースのアンロックを待つ場合、矢印がそのトランザクションに向かいます。
– トランザクション間で、リソースのアンロックを待つ状態がある場合、依存関係がグラフとして表現されます。
まず、トランザクションのスケジュールに基づいて、各時刻でどのトランザクションが何を行っているかを見てみましょう:
- t1: T1は`select(A)`。T1がAを共有ロックします。
- t2: T2は`select(B)`。T2がBを共有ロックします。
- t3: T3は`select(A)`。T3がAを共有ロックしますが、T1もAをロックしているので、T3はT1がロックを解除するまで待機します(このためT1→T3の依存関係が発生)。
- t4: T4は`select(B)`。T4がBを共有ロックしますが、T2もBをロックしているので、T4はT2がロックを解除するまで待機します(T2→T4の依存関係)。
- t6: T1は`select(C)`を行います。T1がCを共有ロックします。
- t7: T2は`select(C)`を行いますが、T1がCをロックしているため、T2はT1がロックを解除するまで待機します(T1→T2の依存関係)。
- t8: T3は`update(C)`を行い、T3がCを専有ロックします。
- t9: T4は`update(A)`を行い、T4がAを専有ロックします。
- t10: T1は`commit`を発行し、T1がトランザクションをコミットします。これにより、T1がロックしていたAやCが解除されます。
重要な点: T1が`select(A)`と`select(C)`を行っているため、T3とT2はそれぞれT1のロック解除を待っています。T2は他のトランザクションによってロックされた資源の解除を待機しており、その依存関係が待ちグラフに表れます。
出典:平成25年度 春期 データベーススペシャリスト試験 午前II 問10