DBMSにおけるデッドロック検出手法【午前2 解説】
要点まとめ
- 結論:デッドロック検出には「待ちグラフ」が用いられます。
- 根拠:待ちグラフはトランザクション間の資源待ち状態を可視化し、循環(サイクル)を検出することでデッドロックを特定します。
- 差がつくポイント:2相ロックや時刻印アルゴリズムはデッドロックの予防や回避に関わる技術であり、検出とは役割が異なる点を理解しましょう。
正解の理由
デッドロックは複数のトランザクションが互いに相手の資源解放を待つ状態であり、これを検出するにはトランザクション間の待ち関係を表す「待ちグラフ」が最適です。待ちグラフ上でサイクルが存在すると、そのサイクルに関わるトランザクション群がデッドロック状態にあると判断できます。したがって、デッドロック検出に直接使われるのは「待ちグラフ」であり、選択肢の中では「エ」が正解です。
よくある誤解
2相ロックはデッドロックの発生を抑制するためのロック管理手法であり、検出手法ではありません。時刻印アルゴリズムはスケジューリングの整合性を保つためのもので、デッドロック検出とは異なります。
解法ステップ
- 問題文の「デッドロックが発生していることを検出するために使用するもの」を確認する。
- 各選択肢の役割を整理する(2相ロック:ロック管理、時刻印アルゴリズム:スケジューリング、チェックポイント:障害回復)。
- 「待ちグラフ」がトランザクション間の待ち状態を表現し、サイクル検出でデッドロックを判定することを理解する。
- 以上から「待ちグラフ」が正解であると判断する。
選択肢別の誤答解説
- ア: 2相ロック
デッドロックの予防や回避に役立つが、発生後の検出手法ではない。
- イ: 時刻印アルゴリズム
トランザクションの整合性を保つためのスケジューリング手法であり、デッドロック検出には使わない。
- ウ: チェックポイント
障害発生時の復旧を容易にするための機能で、デッドロック検出とは無関係。
- エ: 待ちグラフ
トランザクション間の待ち状態をグラフで表し、サイクル検出によりデッドロックを判定する正しい手法。
補足コラム
デッドロックの管理には「予防」「回避」「検出と回復」の3つのアプローチがあります。予防はデッドロックが起きないように設計し、回避は動的に安全な状態を保ちます。検出は発生後に問題を見つけて対処する方法で、待ちグラフはこの検出に用いられます。データベース管理システム(DBMS)では効率的なデッドロック検出が性能維持に重要です。
FAQ
Q: 待ちグラフでサイクルが見つかったらどうするのですか?
A: サイクルが検出されたら、デッドロック状態なので、通常はどれか一つのトランザクションを強制終了(ロールバック)して解消します。
Q: 2相ロックはデッドロックを完全に防げますか?
A: いいえ。2相ロックはデッドロックの発生を抑制しますが、完全に防ぐことはできず、検出と回復が必要になる場合があります。
関連キーワード: デッドロック、待ちグラフ、トランザクション管理、DBMS, ロック管理