基本情報技術者 2013年 春期 午前(科目A) 問30
問題文
データベースの排他制御のロック獲得の可能性のうち、適切なものはどれか。
選択肢
ア:あるトランザクションが共有ロックを獲得している資源に対して、別のトランザクションが共有ロックを獲得することは可能である。(正解)
イ:あるトランザクションが共有ロックを獲得している資源に対して、別のトランザクションが専有ロックを獲得することは可能である。
ウ:あるトランザクションが専有ロックを獲得している資源に対して、別のトランザクションが共有ロックを獲得することは可能である。
エ:あるトランザクションが専有ロックを獲得している資源に対して、別のトランザクションが専有ロックを獲得することは可能である。
🔒 解説は解答すると表示されます
データベースの共有ロックと専有ロック【午前解説】
正解の理由
正解: ア
共有ロック(Shared lock, S)は読み取り目的で設定され、複数トランザクションが同一資源に対して同時に共有ロックを取得しても問題ありません。一方、専有ロック(Exclusive lock, X)は書き込みや独占的操作のために資源を単独占有し、他のトランザクションによる共有ロックや専有ロックの取得を許しません。したがって「あるトランザクションが共有ロックを獲得している資源に別のトランザクションが共有ロックを獲得することは可能」であるアが正しい選択です。
共有ロック(Shared lock, S)は読み取り目的で設定され、複数トランザクションが同一資源に対して同時に共有ロックを取得しても問題ありません。一方、専有ロック(Exclusive lock, X)は書き込みや独占的操作のために資源を単独占有し、他のトランザクションによる共有ロックや専有ロックの取得を許しません。したがって「あるトランザクションが共有ロックを獲得している資源に別のトランザクションが共有ロックを獲得することは可能」であるアが正しい選択です。
解法ステップ
- 問題文からロックの種類を確認(共有ロック=S、専有ロック=X)。
- ロックの互換性ルールを思い出す(S vs S: 可、S vs X: 不可、X vs S: 不可、X vs X: 不可)。
- 各選択肢を互換性ルールに当てはめて可否を判定する。
- ロック昇格や特殊ケースが問題に影響しないか確認する(記述がなければ標準ルールで判断)。
選択肢別の誤答解説
- ア: 正しい。共有ロックは読み取り用で互いに干渉せず複数同時取得可能。
- イ: 誤り。ある資源に既に共有ロックが存在すると、別トランザクションがその資源に専有ロックを取ることはできない(既存の共有ロックが原因でブロックされる)。
- ウ: 誤り。専有ロックを既に持つ資源に対して他トランザクションが共有ロックを取ることは許されない(専有が排他する)。
- エ: 誤り。専有ロックは資源を単独占有するため、別トランザクションが同じ資源に専有ロックを同時に取ることはできない。
よくある誤解
- 「共有ロックは読み取り専用だから絶対安全」と思い込み、トランザクション間の相互作用(他トランザクションによる書込み要求)を見落とす。共有ロックが存在しても、専有ロック取得要求があれば待ちやブロックが生じる。
- 「共有ロックがあると専有ロックは絶対取れない」と単純化する誤解。単一トランザクション内で他の共有ロックが無ければロック昇格(upgrade)で専有にできる場合がある(ただし実装依存でデッドロックに注意)。
- 排他制御=トランザクション分離レベルと混同する。Isolationレベルは動作に影響するが、ロック互換性そのものの定義とは異なる。
補足コラム
- ロック互換性表(簡略)
- S vs S: 可(共有可能)
- S vs X: 不可
- X vs S: 不可
- X vs X: 不可
- 実際のDB実装では「行レベルロック」「テーブルロック」「インテントロック」など階層的なロック機構があり、パフォーマンスやデッドロック回避のために細かな挙動が異なります。
- ロック昇格(同一トランザクション内でS→X)やロックダウングレードは可能だが、他トランザクションの存在により昇格がブロックされデッドロック原因になり得ます。実務では短いトランザクションと明示的なコミットが重要です。
FAQ
Q1: 共有ロック中に同一トランザクションが専有ロックに昇格できますか?
A1: 同一トランザクション内で他に競合する共有ロックが無ければ昇格できる場合がありますが、他トランザクションが共有ロックを持っていると昇格はブロックされるか失敗します(実装依存)。
A1: 同一トランザクション内で他に競合する共有ロックが無ければ昇格できる場合がありますが、他トランザクションが共有ロックを持っていると昇格はブロックされるか失敗します(実装依存)。
Q2: 共有ロックはリードコミットやリードアンコミットなどの分離レベルと関係ありますか?
A2: 関係します。分離レベルはどのタイミングでロックを保持・解放するかに影響し、結果的に現れる現象(ダーティリード、不可視リードなど)に関係します。
A2: 関係します。分離レベルはどのタイミングでロックを保持・解放するかに影響し、結果的に現れる現象(ダーティリード、不可視リードなど)に関係します。
Q3: 「排他制御=ロック」しかないですか?
A3: ロック以外にマルチバージョン並行制御(MVCC)などの非ロック方式もあり、読み取りのためにロックを取らない実装も存在します。
A3: ロック以外にマルチバージョン並行制御(MVCC)などの非ロック方式もあり、読み取りのためにロックを取らない実装も存在します。
関連キーワード: ロック互換性、共有ロック、専有ロック、排他制御、トランザクション、デッドロック、ロック昇格、行レベルロック、インテントロック

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

