待ちグラフとは?まちグラフ
待ちグラフとは、トランザクションを節点、「TiがTjの保持するロックの解放を待っている」関係を有向辺として表した有向グラフ。閉路が存在することとデッドロックの発生が同値になるため、DBMSは定期的に閉路を探し、見つかったら1つを犠牲者として選びロールバックさせる。検出方式のデッドロック対策を支える表現である。
最終更新:2026-10-06
この語が出る過去問を解く →背景
互いのロックを待ち合う状態は、待っている側からは「相手が遅い」ようにしか見えず、放置すれば永久に進まない。ロックを取る順序を全体で決めれば予防できるが、SQLを書く全員に順序を守らせるのは現実には難しい。そこで待ちの関係を素直に記録し、閉路の有無だけを機械的に判定する方式が採られた。応用情報では検出と予防の区別を問う形で出る。
具体例
PostgreSQLは deadlock_timeout(既定1秒)を超えた待ちを見つけると待ちグラフを組み立て、閉路を検出した時点で片方のトランザクションを中断してエラーを返す。T1→T2→T3→T1という閉路であれば、どれか1つをロールバックすれば辺が消え、残りは処理を続けられる。
試験での引っ掛け
待ちグラフはデッドロックの検出であって予防ではない。予防側はwait-die/wound-waitのようなタイムスタンプ方式や、資源への一方向の順序付けで、そもそも閉路を作らせない。辺があるだけでは単なる待ちであり、閉路になって初めてデッドロックである点も取り違えやすい。
関連用語
出た過去問
出典:平成29年度 秋期 応用情報技術者試験 午前 問29(IPA)
トランザクションA〜Gの待ちグラフにおいて、永久待ちの状態になっているトランザクション全てを列挙したものはどれか。ここで、待ちグラフのX→Yは、トランザクション…
正解:B, C, D, F
要点:待ちグラフの閉路と、そこへ待ちが連なるものが永久待ち
永久待ちになるのは、待ちグラフの閉路に含まれるトランザクションと、その閉路に向かって待っているトランザクションである。この待ちグラフではB→D→C→Bという閉路が成立しており、B・C・Dは互いのアンロックを待ち続ける。さらにFはDのアンロックを待っているため、Dが永久に解放されない以上Fも永久待ちとなる。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。