デッドロック
更新日:
用語解説
デッドロックは、複数のトランザクションが互いに相手の保持する資源の解放を待ち、待機関係が循環してどれも処理を進められない状態です。単なる一方向のロック待ちとは異なります。
■ 試験で押さえるポイント
Tx-AがR1を保持してR2を待ち、Tx-BがR2を保持してR1を待つと、待ちグラフにA→B→Aの閉路ができ、自然には解消しません。
成立条件は、資源の相互排他、保持したまま別資源を待つ、強制横取り不可、循環待ちです。いずれかを崩せば予防できます。
DBMSは待ちグラフ又はタイムアウトで検出し、被害が小さいトランザクションを犠牲者としてROLLBACKしてロックを解放し、残りを進めます。アプリは中断された処理を再試行します。
全処理でロック取得順序を統一すれば循環を防ぎやすくなります。長時間待つ飢餓状態は特定処理だけが繰り返し資源を得られない状態で、デッドロックとは違います。
■ 選択肢での判断ポイント
保持資源と待ち資源をトランザクションごとに矢印で描き、閉路があるかを確認します。解消には少なくとも一つを取消し、単なる待ち時間延長だけでは循環は消えません。
例: Aが商品1をXロック後に商品2を要求し、Bが商品2をXロック後に商品1を要求するとデッドロックです。BをROLLBACKすれば商品2が解放され、Aが続行できます。