基本情報 平成27年度 春期 問28:テクノロジ系に関する問題
“出庫記録" 表に対する SQL 文のうち, 最も大きな値が得られるものはどれか。 出庫記録 商品番号 日付 数量 NP200 | 2015-10-10 FP233 | 2015-10-10 NP200 | 2015-10-11 FP233 | 2015-10-11 【トら 111 OO SELECT AVG(数量) FROM 出庫記録 WHERE 商品番号 = NP200' SELECT COUNT(*) FROM 出庫記録 SELECT MAX(数量) FROM 出庫記録 SELECT SUM(数量) FROM 出庫記録 WHERE 日付 = 2015-10-11' H さいぺ 問29 ロックの両立性に関する記述のうち, 適切かものはどれか。
- aトランザクション 征,」 が共有ロックを獲得している資源に対して, トランザクシ ョン T。は共有ロックと専有ロックのどちらも獲得することができる。
- bトランザクション 征, が共有ロックを獲得している資源に対して, トランザクシ ョン T。 は共有ロックを獲得することはできるが, 専有ロックを獲得することはで きない。正答
- cトランザクション T」 が専有ロックを獲得している資源に対して, トランザクシ ョン T。は専有ロックと共有ロックのどちらも獲得することができる。
- dトランザクション T, が専有ロックを獲得している資源に対して, トランザクシ ョン T。 は専有ロックを獲得することはできるが, 共有ロックを獲得することはで きない。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b「ロックされた資源には、共有ロックは取れるが専有ロックは取れない」です。
ロックは図書館の本に例えるとわかりやすい。
- 共有ロック(読むだけ)=みんなで一緒に読書OK
- 専有ロック(書く)=一人で独占して書き込み中、他の人は読めない
誰かが「読書中」のとき、別の人も読書(共有)に加われるけど、書く(専有)のはできません。
👉 覚え方:「読みは譲り合えるけど、書きは独占」。
ほかの選択肢:a 共有時に専有が取れる=×/c 専有時に他が割り込める=×/d 専有時にも別の専有が取れる=×。
なぜこれが正解か
正解は b。ロックの両立性(Lock Compatibility)の原則は次の表で表される:
| 取得済み \ 要求 | 共有ロック | 専有ロック |
|---|---|---|
| 共有ロック | ○(両立) | ×(待機) |
| 専有ロック | ×(待機) | ×(待機) |
共有ロック(Shared Lock:読み取り用)同士は両立可能、専有ロック(Exclusive Lock:書き込み用)は他のいかなるロックも排除する。
各選択肢の解説
- a 誤り:共有ロック取得中に専有ロックは取れない(書き込み中は他の読み取りも止める必要があるため)。
- c 誤り:専有ロック中は共有ロックも取れない(読み取り一貫性確保のため)。
- d 誤り:専有ロック中は別の専有ロックも取れない。
覚え方・ひっかけ注意
「共有⇔共有:OK/その他全部:NG」とシンプルに記憶。共有ロックの目的は「読み取り中に変更されない保証」、専有ロックは「自分以外何もさせない」。デッドロック検出・回避(ウェイトダイ/ウンドダイ方式)と併せて出題されることが多い。
理論的背景
ロック粒度(テーブルロック・ページロック・行ロック)、ロック方式(悲観的ロック・楽観的ロック)、トランザクション分離レベル(READ UNCOMMITTED / READ COMMITTED / REPEATABLE READ / SERIALIZABLE)はACIDのI(Isolation)を実現する仕組み。2相ロッキングプロトコル(2PL:Two-Phase Locking)はロック取得フェーズと解放フェーズを分離することで直列化可能性を保証する。
実務での使われ方
商用DBMSの実装:
- Oracle:MVCC(Multi-Version Concurrency Control)でリードロック原則不要
- PostgreSQL:MVCC+明示的ロック(SELECT FOR UPDATE / FOR SHARE)
- MySQL InnoDB:行ロック+次キーロック(Next-Key Lock)でファントム読み防止
WebアプリではDB側ロックよりアプリ層の楽観的ロック(version列+WHERE句チェック)が主流で、ロング待機回避とスケーラビリティを両立する。
試験での位置づけ
データベース分野で頻出。基本情報・応用情報・データベーススペシャリストで隔回出題。デッドロック検出・回避、分離レベルとアノマリ(ダーティリード/ファジーリード/ファントムリード)の対応は必須暗記。
選択肢の発展補足
- ロックエスカレーション:行ロック多数→ページロック→テーブルロックへ昇格(オーバーヘッド削減)。
- インテンションロック(IX/IS/SIX):階層ロックで上位レベルへの予告。
- スナップショット分離(SI:Snapshot Isolation):MVCC実装の中核。書き込みスキューに弱いがSerializable Snapshot Isolation(SSI:PostgreSQL)で対策。
- 分散DBでは2PC(2相コミット)・PaxosやRaftによる合意形成と組み合わせ、CAP定理/PACELC定理の文脈で出題される。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成27年度 春期 問28/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。