デッドロックとは?デッドロック
デッドロックとは、複数のトランザクションが互いに相手の握るロックの解放を待ち合い、どれも先へ進めなくなる状態。放置すると待ちが連鎖して該当機能が止まるため、DBMSは待ち状態を監視し、片方を強制的に打ち切って(ロールバックして)もう一方を進めることで解消する。
最終更新:2026-10-06
プロジェクトマネージャを最短で暗記・合格する →背景
同時実行の性能を上げるには、ロックの粒度を細かくして必要な資源だけを順に確保していく方が有利になる。しかし資源を分けて順に取ると、取得の順序が処理ごとに違う場合に互いの待ちが循環しうる。デッドロックはこの性能と安全性の交換条件から生まれる現象で、設計で予防するか実行時に検出して壊すかの選択になる。
具体例
Oracle DatabaseやPostgreSQLは待ちグラフを定期的に調べ、循環を見つけると一方のトランザクションをエラーで終了させる。本番では「特定のバッチと夜間オンラインが重なる日だけ処理が落ちる」という形で現れることが多く、条件がそろわないと再現しないため受入テストをすり抜けやすい。
試験での引っ掛け
検出は待ちグラフに閉路があるかで判定する。閉路に含まれるトランザクションだけでなく、その先で順番を待っている処理も巻き込まれて止まる点が見落とされやすい。予防はロック獲得の順序を全処理でそろえることで、これは実装規約として最初に決めておかないと、後から直すのが高くつく。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。