データベーススペシャリスト 2021年 午前2 問13
問題文
2相ロック方式を用いたトランザクションの同時実行制御に関する記述のうち適切なものはどれか。
選択肢
ア:全てのトランザクションが直列に制御されデッドロックが発生することはない。
イ:トランザクションのコミット順序はトランザクション開始の時刻順となるように制御される。
ウ:トランザクションは自分が獲得したロックを全て解除した後にだけコミット操作を実行できる。
エ:トランザクションは必要な全てのロックを獲得した後にだけロックを解除できる。(正解)
2相ロック方式を用いたトランザクションの同時実行制御【午前2 解説】
要点まとめ
- 結論:2相ロック方式では、トランザクションは全ての必要なロックを獲得した後にのみロックを解除できるため、一貫性が保たれます。
- 根拠:2相ロック方式は「拡張フェーズ」と「縮小フェーズ」の2段階でロック操作を行い、拡張フェーズでロックを獲得し終えると縮小フェーズでのみロックを解除可能です。
- 差がつくポイント:ロックの解除タイミングとコミット操作の関係を正確に理解し、デッドロックやコミット順序の誤解を避けることが重要です。
正解の理由
選択肢エは「トランザクションは必要な全てのロックを獲得した後にだけロックを解除できる」と述べており、これは2相ロック方式の基本原則に合致しています。2相ロック方式は、トランザクションのロック操作を「拡張フェーズ(ロック獲得のみ)」と「縮小フェーズ(ロック解除のみ)」に分け、拡張フェーズが終了するまでロックを解除できません。これにより、データの一貫性と直列化可能性が保証されます。
よくある誤解
2相ロック方式はデッドロックを完全に防止するわけではありません。また、コミット順序が開始時刻順になるわけでもなく、ロック解除のタイミングとコミット操作は必ずしも同時ではありません。
解法ステップ
- 2相ロック方式の基本概念を確認する(拡張フェーズと縮小フェーズ)。
- 各選択肢の内容がこの基本概念に合致しているか検証する。
- デッドロックの発生有無やコミット順序の制御についての誤りを見抜く。
- ロック解除のタイミングに関する記述が正しいかを判断する。
- 最も正確な記述である選択肢エを選ぶ。
選択肢別の誤答解説
- ア: 「全てのトランザクションが直列に制御されデッドロックが発生しない」は誤り。2相ロック方式でもデッドロックは発生する可能性があります。
- イ: 「コミット順序が開始時刻順になる」は誤り。コミット順序はロック獲得や解放のタイミングに依存し、開始時刻順とは限りません。
- ウ: 「ロックを全て解除した後にコミットできる」は誤り。2相ロック方式ではコミット前にロックを解除することはなく、ロック解除はコミット後に行われます。
- エ: 「必要な全てのロックを獲得した後にだけロックを解除できる」は正しい。
補足コラム
2相ロック方式はデータベースの同時実行制御で広く使われる手法で、トランザクションの直列化可能性を保証します。ただし、デッドロック検出や回避のための追加機構が必要になることもあります。さらに、厳密2相ロック(Strict 2PL)では、コミットまでロックを保持し、より強い一貫性を実現します。
FAQ
Q: 2相ロック方式でデッドロックは完全に防げますか?
A: いいえ。2相ロック方式でもデッドロックは発生する可能性があり、別途検出や回避の仕組みが必要です。
A: いいえ。2相ロック方式でもデッドロックは発生する可能性があり、別途検出や回避の仕組みが必要です。
Q: コミット操作はロック解除の前後どちらで行われますか?
A: 通常、コミット操作はロック解除の前に行われます。ロック解除はコミット後に行われることが多いです。
A: 通常、コミット操作はロック解除の前に行われます。ロック解除はコミット後に行われることが多いです。
Q: 2相ロック方式の「拡張フェーズ」とは何ですか?
A: 拡張フェーズはトランザクションが必要なロックを獲得する期間で、この期間中はロックを解除できません。
A: 拡張フェーズはトランザクションが必要なロックを獲得する期間で、この期間中はロックを解除できません。
関連キーワード: 2相ロック方式、同時実行制御、トランザクション管理、デッドロック、直列化可能性

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

