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