ホーム > データベーススペシャリスト試験 > 2016年
データベーススペシャリスト試験 2016年 午前2 問13
DBMSにおいて, トランザクション間でデッドロックが発生していることを検出するために使用するものはどれか。
ア:2相ロック
イ:時刻印アルゴリズム
ウ:チェックポイント
エ:待ちグラフ(正解)
解説
デッドロック検出に関する解説
問題のポイント
DBMS(データベース管理システム)では、複数のトランザクションが同時に処理される際にデッドロックが発生することがあります。
デッドロックとは、複数のトランザクションがお互いに相手のリソースの解放を待っている状態で、これが永久に続いてしまう問題です。
デッドロックとは、複数のトランザクションがお互いに相手のリソースの解放を待っている状態で、これが永久に続いてしまう問題です。
ここでの問いは、「デッドロックの有無を検出するために利用されるものは何か?」ということです。
選択肢とその説明
ア: 2相ロック (Two-Phase Locking)
- トランザクションの同期制御方式の一つで、ロックの獲得と解放のタイミングを制限することで、スケジューラの直列化を保証します。
- ただし、デッドロックの予防や回避には関わることもありますが、直接デッドロックを検出する機構ではありません。
イ: 時刻印アルゴリズム (Timestamp Ordering)
- トランザクションにタイムスタンプを割り当て、古いものを優先して競合を解決する方式です。
- これによりデッドロックは起きにくくなりますが、やはり直接的な検出機能を持つものではありません。
ウ: チェックポイント (Checkpoint)
- データベースの状態を一定時点でディスクなどに保存する仕組み。
- トランザクションの復旧処理などに役立ちますが、デッドロックとは直接関係ありません。
エ: 待ちグラフ (Wait-for Graph)
- トランザクションがリソースのロックを待っている状態をグラフで表現する方法。
- ノードがトランザクション、辺が「あるトランザクションが他のトランザクションが保持するロックを待っている」状態を指します。
- 待ちグラフ上でサイクル(閉路)が存在する場合、そこに関わるトランザクション間でデッドロックが発生していると判断できます。
- このグラフを使ってデッドロックの検出が可能。
なぜ「エ: 待ちグラフ」が正解なのか?
デッドロックの発生は、「トランザクション間の待ちの相互関係」がループ(閉路)を形成することにより生じます。
従って、この「待ち」の状況を整理して表す方法として、「待ちグラフ」が非常に有効です。
従って、この「待ち」の状況を整理して表す方法として、「待ちグラフ」が非常に有効です。
- 待ちグラフをデータベース監視システムが持つことで、
- ループが存在するかどうかを検出アルゴリズムで判定し、
- 見つかればデッドロックと確定できるため、
デッドロックの検出機能として待ちグラフは代表的かつ標準的な手法となっています。
まとめ
参考文献
- データベースシステム概論(教科書)
- アブルマンデータベース管理システム第3版(Abraham Silberschatz 他)
まとめ
問題文の正解「エ: 待ちグラフ」は、デッドロック検出に用いられる典型的な手法です。
トランザクションの待ち関係をグラフで表し、サイクルの有無を調べることでデッドロックを検出します。
トランザクションの待ち関係をグラフで表し、サイクルの有無を調べることでデッドロックを検出します。