ITサービスマネージャ 2023年 午前2 問23
問題文
2相ロッキングプロトコルに従うトランザクションで発生する可能性のある現象はどれか。
選択肢
ア:ダーティリード
イ:デッドロック(正解)
ウ:ノンリピータブルリード
エ:ロストアップデート
🔒 解説は解答すると表示されます
2相ロッキングプロトコル【午前2解説】
正解の理由
2相ロッキングプロトコルでは、トランザクションがロックを取得する「拡大期」と、ロックを解放する「縮小期」を分けます。縮小期に入った後は、新たなロックを取得できません。
この方式では、複数のトランザクションが互いのロック解除を待ち続けるデッドロックが発生する可能性があります。そのため、該当する選択肢はイです。
解法ステップ
- 2相ロッキングプロトコルの特徴を確認します。
ロックを取得する期間と、解放する期間を分ける方式です。 - ロックによってトランザクション同士が待ち合う状況を考えます。
例えば、T1が資源Aをロックし、T2が資源Bをロックしているとします。 - T1が資源Bを、T2が資源Aを要求すると、互いに相手のロック解除を待ちます。
- このような待ち状態が解消されなくなる現象がデッドロックです。
選択肢別の誤答解説
- ア:ダーティリード
ほかのトランザクションがまだ確定していないデータを読み取る現象です。2相ロッキングそのものだけでは、ロックの解放時期によっては完全に防げない場合があります。未確定データの読取りを防ぐには、一般に厳密2相ロッキングのようにコミットまでロックを保持する方式が使われます。本問で問われている2相ロッキングの代表的な問題は、デッドロックです。 - イ:デッドロック
ロックの解除を互いに待ち続ける状態です。2相ロッキングでも発生し得るため、正しい選択肢です。 - ウ:ノンリピータブルリード
同じデータを再度読み取ったとき、値が変わっている現象です。ロックの取得・解放の規則によって防止されます。2相ロッキングでは、一度ロックを解放した後に再取得できないため、この現象を避けられます。 - エ:ロストアップデート
複数のトランザクションが同じデータを更新し、先に行った更新が後の更新に上書きされて失われる現象です。排他ロックによって更新を直列化することで防止できます。
よくある誤解
- 2相ロッキングを使えばデッドロックも防げる
2相ロッキングはロックの取得・解放の順序を定めますが、デッドロックを防止する仕組みではありません。 - 2相ロッキングと厳密2相ロッキングは同じ
厳密2相ロッキングでは、特に更新用のロックをコミットまで保持します。未確定データの読取りを防ぐうえで重要な違いです。 - ロックを使う方式なら、すべての異常が必ず防げる
防げる現象はロックの種類や解放時期にも左右されます。方式の名前だけでなく、ロックをいつ解放するかも確認しましょう。
補足コラム
デッドロックを見分けるには、トランザクション間に「待ちの輪」ができているかを考えると分かりやすいです。
例えば、T1がAを保持してBを待ち、T2がBを保持してAを待つ場合、どちらも先に進めません。デッドロックへの対策には、タイムアウトによる検出や、ロック取得順序の統一などがあります。
FAQ
Q. 2相ロッキングは何を保証する方式ですか?
A. 基本的には、実行結果が直列実行と整合するようにする方式です。ただし、デッドロックを防ぐものではありません。
A. 基本的には、実行結果が直列実行と整合するようにする方式です。ただし、デッドロックを防ぐものではありません。
Q. ダーティリードを確実に防ぐにはどうしますか?
A. 未確定の更新データをほかのトランザクションが読めないよう、ロックをコミットまで保持する厳密2相ロッキングなどを使います。
A. 未確定の更新データをほかのトランザクションが読めないよう、ロックをコミットまで保持する厳密2相ロッキングなどを使います。
Q. デッドロックはロックを解放すれば解決しますか?
A. ロックを解放すれば待ち状態は解消しますが、どのトランザクションを中断するかなど、解消のための制御が必要です。
A. ロックを解放すれば待ち状態は解消しますが、どのトランザクションを中断するかなど、解消のための制御が必要です。
関連キーワード: 2相ロッキング、厳密2相ロッキング、デッドロック、排他ロック、ダーティリード

\ せっかくなら /
ITサービスマネージャを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

