デッドロックとは?デッドロック
デッドロックとは、複数のトランザクションが互いに相手の持つロックの解放を待ち合い、どれも先へ進めなくなった状態。放置しても自然には解けないため、データベース管理システムがいずれかを強制的に打ち切って解消する。
最終更新:2026-10-06
この語が出る過去問を解く →背景
資源をロックで守るのは同時更新による破壊を防ぐためだが、複数の資源を別々の順で押さえると、待ちが輪になって止まる。輪ができない獲得順序を全体で取り決めておけば、原理的に起こらない。運用では夜間バッチと日中オンラインが同じ表を触る構成で顕在化しやすく、ジョブスケジュールの見直しが対策になることも多い。
具体例
夜間バッチが在庫表を押さえたまま受注表を待ち、遅延して残っていたオンライン処理が受注表を押さえたまま在庫表を待つ。片方が打ち切られ、翌朝はジョブ異常終了として報告される。再発防止は、ロックの獲得順序を全プログラムでそろえることにある。
試験での引っ掛け
検出は待ちグラフに閉路があるかで判定する。閉路に入っている当事者だけでなく、その後ろに並んで待っている無関係な処理も止まるため、影響範囲は2件では収まらない。専有と共有のロックが混在すると、同じ表でも組合せ次第で起きたり起きなかったりする。
関連用語
出た過去問
出典:令和5年度 春期 ITサービスマネージャ試験 午前Ⅱ 問23(IPA)
2相ロッキングプロトコルに従うトランザクションで発生する可能性のある現象はどれか。
正解:デッドロック
要点:2相ロックは直列化可能性を保証するが、デッドロックは防げない
2相ロッキングプロトコルは、ロックを取得する成長相と解放する縮退相に分け、いったん解放を始めたら新たなロックを取らない方式である。これにより直列化可能性(順番に実行したのと同じ結果になる性質)が保証され、ロストアップデートやノンリピータブルリードといった不整合は防げる。さらにロックをコミットまで保持する形(厳格な2相ロッキング)にすれば、ダーティリードも防げる。しかし複数トランザクションが互いの保持するロックを待ち合う状態は避けられず、デッドロックは発生し得る。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。