ホーム > データベーススペシャリスト試験 > 2017年
データベーススペシャリスト試験 2017年 午前2 問18
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のロックはデータの整合性を保つために不可欠です。
共有ロック(Sロック)は複数のトランザクションが同時に読み取り可能にする一方、専有ロック(Xロック)は書き込みや構造変更時に排他制御を行います。
ロックの粒度(行単位、表単位)によって競合の範囲が変わるため、適切なロック設計が性能と整合性の両立に重要です。
共有ロック(Sロック)は複数のトランザクションが同時に読み取り可能にする一方、専有ロック(Xロック)は書き込みや構造変更時に排他制御を行います。
ロックの粒度(行単位、表単位)によって競合の範囲が変わるため、適切なロック設計が性能と整合性の両立に重要です。
FAQ
Q: 共有ロックと専有ロックは同時に存在できますか?
A: いいえ、共有ロックは複数存在可能ですが、専有ロックは単独でしか存在できません。競合します。
A: いいえ、共有ロックは複数存在可能ですが、専有ロックは単独でしか存在できません。競合します。
Q: 行単位の共有ロックがかかっている場合、別の行に専有ロックは可能ですか?
A: 多くのRDBMSでは可能ですが、表単位の専有ロックは表全体に影響するため獲得できません。
A: 多くのRDBMSでは可能ですが、表単位の専有ロックは表全体に影響するため獲得できません。
関連キーワード: 共有ロック, 専有ロック, トランザクション制御, 行ロック, 表ロック, 排他制御, データベース整合性