ホーム > データベーススペシャリスト試験 > 2021年
データベーススペシャリスト試験 2021年 午前2 問14
RDBMSのロックに関する記述のうち適切なものはどれか。ここでX, Yはトランザクションとする。
ア:XがA表内の特定行aに対して共有ロックを獲得しているときはYはA表内の別の特定行bに対して専有ロックを獲得することができない。
イ:XがA表内の特定行aに対して共有ロックを獲得しているときはYはA表に対して専有ロックを獲得することができない。(正解)
ウ:XがA表に対して共有ロックを獲得しているときでもYはA表に対して専有ロックを獲得することができる。
エ:XがA表に対して専有ロックを獲得しているときでもYはA表内の特定行aに対して専有ロックを獲得することができる。
解説
RDBMSのロックに関する問題【午前2 解説】
要点まとめ
- 結論:共有ロックを獲得したトランザクションがある場合、他のトランザクションは同じ表に対して専有ロックを獲得できません。
- 根拠:共有ロックは読み取りのために複数トランザクションが同時に保持可能ですが、専有ロックは排他制御のため共有ロックと競合します。
- 差がつくポイント:行単位ロックと表単位ロックの違いを理解し、共有ロックと専有ロックの競合関係を正確に把握することが重要です。
正解の理由
選択肢イは「XがA表内の特定行aに対して共有ロックを獲得しているときはYはA表に対して専有ロックを獲得できない」と述べています。
共有ロックは複数トランザクションが同時に同じデータを読み取るために許可されますが、専有ロックは更新や削除など排他制御のために必要です。
表全体に対する専有ロックは、表内の一部に共有ロックが存在する限り獲得できません。したがって、イが正解です。
共有ロックは複数トランザクションが同時に同じデータを読み取るために許可されますが、専有ロックは更新や削除など排他制御のために必要です。
表全体に対する専有ロックは、表内の一部に共有ロックが存在する限り獲得できません。したがって、イが正解です。
よくある誤解
共有ロックは行単位であれば他の行に専有ロックをかけられると誤解しがちですが、表単位の専有ロックは共有ロックの存在でブロックされます。
また、専有ロックは共有ロックと競合するため、同時に獲得できないことを理解していない場合があります。
また、専有ロックは共有ロックと競合するため、同時に獲得できないことを理解していない場合があります。
解法ステップ
- 共有ロックと専有ロックの意味を確認する(共有=読み取り、専有=書き込み)。
- 行単位ロックと表単位ロックの違いを整理する。
- 共有ロックがかかっている場合、専有ロックが獲得可能かどうかを考える。
- 選択肢の記述がロックの競合ルールに合致しているかを判断する。
- 最も正しい記述を選ぶ。
選択肢別の誤答解説
- ア: 「別の行に専有ロックを獲得できない」は誤り。行単位ロックなら別行は可能。
- イ: 正解。共有ロックがある行がある場合、表全体の専有ロックは獲得できない。
- ウ: 共有ロックがある表に専有ロックを獲得できるのは誤り。競合して獲得不可。
- エ: 専有ロックがある表に対して別のトランザクションが専有ロックを獲得できるのは誤り。排他制御が働く。
補足コラム
RDBMSのロックはデータの整合性を保つために不可欠です。
共有ロックは複数の読み取りを許可し、専有ロックは書き込み時に排他制御を行います。
行単位ロックは細かい制御が可能で並行性が高い一方、表単位ロックは競合が多くなりやすいです。
トランザクションの分離レベルやロックの粒度を理解することが、性能と整合性のバランスを取る鍵となります。
共有ロックは複数の読み取りを許可し、専有ロックは書き込み時に排他制御を行います。
行単位ロックは細かい制御が可能で並行性が高い一方、表単位ロックは競合が多くなりやすいです。
トランザクションの分離レベルやロックの粒度を理解することが、性能と整合性のバランスを取る鍵となります。
FAQ
Q: 共有ロックと専有ロックは同時に獲得できますか?
A: いいえ、共有ロックが存在するデータに対して専有ロックは獲得できません。競合状態となるためです。
A: いいえ、共有ロックが存在するデータに対して専有ロックは獲得できません。競合状態となるためです。
Q: 行単位の共有ロックがかかっている場合、別の行に専有ロックは獲得可能ですか?
A: はい、行単位ロックなら別の行に対して専有ロックを獲得できます。
A: はい、行単位ロックなら別の行に対して専有ロックを獲得できます。
Q: 表単位の専有ロックはどのような場合に使われますか?
A: 大量のデータ更新やメンテナンス時に、表全体の排他制御が必要な場合に使われます。
A: 大量のデータ更新やメンテナンス時に、表全体の排他制御が必要な場合に使われます。
関連キーワード: 共有ロック, 専有ロック, トランザクション制御, 行ロック, 表ロック, 排他制御, データベース整合性