戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2019年 午前2 問10


問題文

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

選択肢

ア:
イ:(正解)
ウ:
エ:

🔒 解説は解答すると表示されます

待ちグラフのノード対応【午前2解説】

正解の理由

図のノードaは「他ノードから矢印が来ていて(受け側)、かつ別ノードへ矢印を出している(発信側)」という特徴を持ちます。スケジュールから待ち関係を整理すると、T4→T2(T4がBの更新でT2の共有ロックを待つ)、T2→T1(T2がCの更新を要求しておりT1のロック解除を待っている)、T3→T1(T3がAの更新でT1の共有ロックを待つ)となります。これらの中で「受け側かつ発信側」の両方を満たすのはT2だけです。したがってノードaは イ(T2)に対応します。

解法ステップ

  1. 各操作で取られるロックとその解放時期(commit時)に注意する。
  2. 時系列で「誰が誰のロック解除を待っているか」を列挙する。
    • t5: T4がupdate(B) を要求。t2のT2がselect(B) で共有ロックを保持しているため、T4はT2のアンロックを待つ → T4 → T2。
    • t8: T2がupdate(C) を要求。t6のT1がselect(C) で共有ロックを保持しているため、T2はT1のアンロックを待つ → T2 → T1。
    • t9: T3がupdate(A) を要求。t1のT1がselect(A) を保持しているため、T3はT1のアンロックを待つ → T3 → T1。
  3. 得られた待ち辺を図の有向辺と照合する。図でaは「dから矢印を受け、bへ矢印を出している」ので、受発双方を持つトランザクション(T2)に対応する。

選択肢別の誤答解説

  • ア: T1 — T1は複数から待たれている(T2とT3がT1のアンロックを待つ)が、T1自身が誰かのロックを待っている操作は直前までにない(t10でcommitを発行する直前)。したがって「発信側」を持つaには該当しない。
  • イ: T2 — 正解。t7/t8によりCの排他化(update)を要求しておりT1のロック解除を待っている(a→bの関係)。同時にt5のT4がBの更新でT2の共有ロックを待っているため、受信辺も持つ(d→a)。よってaに一致する。
  • ウ: T3 — T3はt9のupdate(A) によりT1を待っている(発信側)が、T3を待っている他トランザクションはこのスケジュールには存在しない(受信辺がない)。したがってa(受発両方)ではない。
  • エ: T4 — T4はt5のupdate(B) によりT2を待っている(発信側)。しかしT4を待っているトランザクションはなく、受信辺を持たないためaではない。

よくある誤解

  • 矢印の向き混同:矢印T_i → T_jは「T_iがT_jのロック解除を待つ」ことを意味する点を逆に解釈しやすい。向きを間違えると待ち関係が全く逆になる。
  • selectとupdateの違いを忘れる:selectは共有ロックで複数同時保持可能、updateは専有ロックで他の共有保持者の解放を要求する。selectの段階ではブロックされないが、後でupdateによるアップグレードで待ち状態になる点を見落としがち。
  • ロックはcommitまで解放されない:commitが来るまで保持されるため、後続のupdateはその時点のロック状態を基に待ちになる。

補足コラム

待ちグラフ(wait-for graph)はデッドロック検出に有効です。サイクル(循環)があればデッドロック発生の可能性があり、介入(タイムアウトやロールバック)による解消が必要です。本設問ではサイクルは発生しておらず、T1のcommit(t10)でロックが解放されれば待ち関係は解消します。ロックの種類やロックの昇格(shared→exclusive)は実務でも注意が必要で、特にアップグレード時に待ちが生じやすい点を覚えておきましょう。

FAQ

Q1: なぜT2のselect(C)(t7)はブロックされなかったのですか?
A1: selectは共有ロックを取得する操作で、既にT1が共有ロックを持っていても複数保持は許されます。ブロックが発生したのはその後のupdate(排他化要求)時点です。
Q2: T3とT2のどちらがノードcやdに対応するかが分からない場合の確認方法は?
A2: ノードの入出力(受信・発信)数を確認します。スケジュールから「誰が誰を待っているか」を列挙し、各トランザクションの入次数・出次数と図の各ノードの入出次数を照合すると一意に対応づけできます。

関連キーワード: ロック制御、待ちグラフ、排他共有ロック、デッドロック検出、ロックアップグレード
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について