Deadlock

複数の処理が互いにロックの解放を待ち続け、処理が進まなくなる状態。

更新日: 2026-07-13

キーワード: lock / transaction / rollback / isolation level / 排他制御 / 楽観ロック / 悲観ロック / タイムアウト / 再試行 / 二重更新

概要

Deadlock は、複数の処理が互いに相手の持っているロックを待ち続け、処理が進まなくなる状態です。 日本語ではデッドロックと呼びます。

DB更新を伴う業務システムでは、トランザクション、排他制御、更新順序と関係します。 金融系では、決済、入金、残高更新、売上確定など、同じデータを複数処理が触る場面で注意が必要です。

内容

典型例は、2つのトランザクションが異なる順序で同じリソースを更新する場合です。

Transaction A: 注文テーブルをロック → 在庫テーブルを待つ
Transaction B: 在庫テーブルをロック → 注文テーブルを待つ

この状態になると、A は B のロック解放を待ち、B は A のロック解放を待つため、どちらも進めません。 DBは通常、デッドロックを検知すると片方のトランザクションを失敗させ、ロールバックします。

見るときの観点

デッドロックを調べるときは、次の観点を見ると整理しやすいです。

関連する概念

参考文献

関連項目

このページを参照しているページ