応用情報技術者 データベース

デッドロックとは何か?

1. 複数のトランザクションが互いに相手のロック解除を待ち、処理が進まなくなった状態 ✓ 正解
2. 一つのトランザクションが長時間ロックを保持し続ける状態
3. データベースへの接続が切断された状態
4. トランザクションがロールバックされた状態

📝 解説

デッドロックは「複数のトランザクションが互いに相手の保持するリソースのロック解除を待ち合い、誰も先に進めなくなった状態」です。道路の交差点でお互いが相手に道を譲り合って(実は譲らずに)誰も動けない渋滞に例えると分かりやすいでしょう。例えばトランザクションAが「テーブル1をロック→テーブル2のロックを要求」、同時にトランザクションBが「テーブル2をロック→テーブル1のロックを要求」した場合、AはBのロック解除待ち、BはAのロック解除待ちとなり無限に待ち続けます。デッドロックを検出後は一方のトランザクションを強制的にロールバックして解消します。デッドロックの予防策として、「全トランザクションが同じ順序でリソースをロックする」ルールを設けることが有効です。誤答の「一つのトランザクションが長時間ロックを保持」はロックタイムアウトの問題、「接続が切断された状態」や「ロールバックされた状態」はデッドロックの定義とは別の概念です。

フラッシュカード形式で データベース を練習する

🎴 練習する

データベース の問題一覧・解説を見る →