応用情報技術者 2019年 秋期 午前2 問28
問題文
RDBMSのロックに関する記述のうち、適切なものはどれか。ここで,X,Yはトランザクションとする。
選択肢
ア:X が A表内の特定行に対して共有ロックを獲得しているときは、 Y は A 表内の別の特定行 bに対して専有ロックを獲得することができない。
イ:X が A表内の特定行 a に対して共有ロックを獲得しているときは、 Y は A表に対して専有ロックを獲得することができない。(正解)
ウ:XがA表に対して共有ロックを獲得しているときでも、 YはA表に対して専有ロックを獲得することができる。
エ:X がA表に対して専有ロックを獲得しているときでも、 Y は A表内の特定行 aに対して専有ロックを獲得することができる。
RDBMSのロックに関する問題【午前2 解説】
要点まとめ
- 結論:共有ロックを獲得したトランザクションがある場合、他のトランザクションは同じ表に対して専有ロックを獲得できません。
- 根拠:共有ロックは読み取りのために複数トランザクションが同時に保持可能ですが、専有ロックは書き込みのために排他制御が必要です。
- 差がつくポイント:行単位ロックと表単位ロックの違い、共有ロックと専有ロックの競合関係を正確に理解することが重要です。
正解の理由
イは「Xが特定行に共有ロックを獲得しているとき、Yは同じ表に対して専有ロックを獲得できない」と述べています。
共有ロックは複数トランザクションが同時に取得可能ですが、専有ロックは排他制御のため、表全体に対して専有ロックを獲得する場合、既に共有ロックが存在すると獲得できません。
したがって、イの記述が正しいです。
共有ロックは複数トランザクションが同時に取得可能ですが、専有ロックは排他制御のため、表全体に対して専有ロックを獲得する場合、既に共有ロックが存在すると獲得できません。
したがって、イの記述が正しいです。
よくある誤解
- 行単位の共有ロックがある場合でも、別の行に専有ロックを獲得できないと誤解しやすいです。
- 共有ロックと専有ロックは同時に存在できないが、共有ロック同士は共存可能と理解していないことがあります。
解法ステップ
- 共有ロックと専有ロックの意味を確認する(共有=読み取り、専有=書き込み)。
- ロックの粒度(行単位か表単位か)を把握する。
- 共有ロックが存在する場合の専有ロックの獲得可否を考える。
- 選択肢の記述と照らし合わせて矛盾がないか検証する。
- 最も正確な記述を選ぶ。
選択肢別の誤答解説
- ア:行単位の共有ロックがある場合でも、別の行に専有ロックを獲得可能なので誤り。
- イ:正解。共有ロックがある表に専有ロックは獲得できない。
- ウ:共有ロックがある表に専有ロックを獲得できるのは誤り。
- エ:専有ロックがある表に別のトランザクションが専有ロックを獲得できるのは誤り。
補足コラム
RDBMSのロックはデータの整合性を保つために不可欠です。共有ロックは複数の読み取りを許可し、専有ロックは書き込み時に排他制御を行います。ロックの粒度は行単位、ページ単位、表単位など様々で、粒度が粗いほど競合が増えやすくなります。適切なロック管理は性能と整合性のバランスを取る鍵です。
FAQ
Q: 共有ロックは複数トランザクションで同時に取得できますか?
A: はい、共有ロックは読み取りのため複数トランザクションで同時に保持可能です。
A: はい、共有ロックは読み取りのため複数トランザクションで同時に保持可能です。
Q: 専有ロックはどのような場合に獲得されますか?
A: データの書き込みや更新時に、他のトランザクションからの干渉を防ぐために獲得されます。
A: データの書き込みや更新時に、他のトランザクションからの干渉を防ぐために獲得されます。
関連キーワード: 共有ロック、専有ロック、トランザクション、排他制御、行ロック、表ロック

\ せっかくなら /
応用情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

