解説
厳格な2相ロッキングプロトコルと表ロックによる隔離性水準【午前2 解説】
要点まとめ
- 結論:厳格な2相ロッキングと表ロックを用いると、トランザクションの隔離性は最高レベルの「SERIALIZABLE」となる。
- 根拠:厳格な2相ロッキングはすべての読み書きロックをトランザクション終了まで保持し、表ロックは他トランザクションの干渉を防ぐため、並行実行の影響を完全に排除する。
- 差がつくポイント:READ COMMITTEDやREPEATABLE READは一部の不整合を許容するが、SERIALIZABLEは理論上すべての不整合を防ぎ、実際の直列実行と同等の結果を保証する点が重要。
正解の理由
厳格な2相ロッキングプロトコルは、トランザクションがコミットまたはロールバックするまでロックを解放しません。これにより、他のトランザクションが同じデータにアクセスしても、読み取りや書き込みの競合が発生しません。さらに、表ロックを適用することで、テーブル全体に対する排他制御が行われ、他トランザクションの影響を完全に排除します。これらの条件は、トランザクションの隔離性を最も高いレベルである「SERIALIZABLE」に保つための要件を満たします。
よくある誤解
READ COMMITTEDやREPEATABLE READも高い隔離性を持つが、厳格な2相ロッキングと表ロックの組み合わせが実現するのは、これらよりもさらに強いSERIALIZABLEである点を混同しやすいです。
解法ステップ
- 2相ロッキングプロトコルの特徴を理解する(ロックの取得と解放のタイミング)。
- 「厳格な」2相ロッキングはロックをトランザクション終了まで保持することを確認。
- 表ロックがテーブル全体の排他制御を行うことを把握。
- これらの条件が他トランザクションの影響を完全に排除し、直列実行と同等の結果を保証することを理解。
- 隔離性水準の定義と比較し、最も高い「SERIALIZABLE」を選択。
選択肢別の誤答解説
- ア: READ UNCOMMITTED
最も低い隔離性で、未コミットのデータも読み取れるため、今回の厳格なロック条件とは合わない。
- イ: READ COMMITTED
コミット済みデータのみ読み取るが、書き込み競合は完全に防げず、ファントムリードなどが発生する可能性がある。
- ウ: REPEATABLE READ
同じデータの繰り返し読み取りは保証されるが、ファントムリード(新規挿入行の読み取り)は防げない場合がある。
- エ: SERIALIZABLE
すべての競合を排除し、トランザクションを直列実行したかのような結果を保証するため正解。
補足コラム
2相ロッキングプロトコルはデータベースのトランザクション制御で広く使われる手法で、ロックの取得と解放のタイミングにより隔離性のレベルが変わります。厳格な2相ロッキングは、コミットまでロックを保持するため、データの一貫性を強く保証します。一方で、性能面ではロック競合が増えやすく、並行処理の効率が低下することもあります。
FAQ
Q: 厳格な2相ロッキングと通常の2相ロッキングの違いは何ですか?
A: 通常の2相ロッキングはロックをトランザクションの途中で解放することがあるが、厳格な2相ロッキングはコミットまたはロールバックまでロックを保持し続けます。
Q: 表ロックはどのような場面で使われますか?
A: テーブル全体の整合性を保つ必要がある場合や、複数行にまたがる操作で他トランザクションの干渉を防ぎたい場合に使われます。
関連キーワード: 2相ロッキング, トランザクション隔離性, SERIALIZABLE, 表ロック, データベーストランザクション