データベース初級
デッドロック
デッドロック
一言で言うと
複数トランザクションが互いの解放を待ち、永遠に止まる状態。
もう少し詳しく
一言で言うと
複数トランザクションが互いの解放を待ち、永遠に止まる状態。
もう少し詳しく
デッドロックは複数のトランザクションが互いのロック解放を循環的に待ち合う状態です。たとえばトランザクションAがテーブルXをロックしてテーブルYを待ち、トランザクションBがテーブルYをロックしてテーブルXを待つと、どちらも前に進めなくなります。RDBMSはデッドロック検出機構を持ち、循環待機を発見すると一方を犠牲者として自動ロールバックし、もう一方を続行させます。この検出と自動解消の仕組みを理解した上で、ロック取得順序の統一やトランザクションの短時間化といった予防策を設計に織り込むことが重要です。
RDB の世界では設計と性能の両面で意識する用語です。SQL を書くだけでなく、正規化やインデックスといった設計思想にも関わってきます。大規模なデータを扱うアプリでは特に重要です。
実務でどう使うか
関連する章
EC Ch13 で詳しく学べます。