基本情報 平成25年度 秋期 問30:テクノロジ系に関する問題
データベースの排他制御のロック獲得の可能性のうち, 適切なものはどれか。
- aあるトランザクションが共有ロックを獲得している資源に対して, 別のトランザ クションが共有ロックを獲得することは可能である。正答
- bあるトランザクションが共有ロックを獲得している資源に対して, 別のトランザ クションが専有ロックを獲得することは可能である。
- cあるトランザクションが専有ロックを獲得している資源に対して, 別のトランザ クションが共有ロックを獲得することは可能である。
- dあるトランザクションが専有ロックを獲得している資源に対して, 別のトランザ クションが専有ロックを獲得することは可能である。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは a です。
ロックには2種類:
- 共有ロック(読むだけ用):本を「読みます」と借りる感じ。他の人も同時に同じ本を読めるからOK
- 専有ロック(書き換え用):本に「書き込みます」と独占予約。他の人は読むことも書くこともできない
だから「共有ロック中に別の共有ロックを取る」のは唯一OKな組合せ。
👉 覚え方:「読む+読むだけOK、それ以外は全部待ち」。
ほかの選択肢:b/c/d は「書く」が絡むので必ずぶつかり待ちが発生します。
なぜこれが正解か
正解は a。共有ロック(Sロック、Shared)は「読取専用」のロックで、複数トランザクションが同時に獲得可能。専有ロック(Xロック、Exclusive)は「読書両用の独占」ロックで、他のいかなるロックとも両立しない。
両立性マトリクスは以下の通り:
| 既存\新規 | S | X |
|---|---|---|
| S | ○ | × |
| X | × | × |
aは S→S で唯一の○、他は全て×となる。
各選択肢の解説
- b 共有→専有:S獲得中はXを取れない(読取中に書き換えを許すと整合性破綻)。
- c 専有→共有:X獲得中は他者の読取も禁止(コミット前の中間状態を見せない)。
- d 専有→専有:X獲得中は他のXも当然不可(書込み競合)。
覚え方・ひっかけ注意
「読み読みOK、それ以外NG」で覚える。ロック粒度(行・ページ・表・データベース)と独立した普遍ルール。なお`SELECT ... FOR UPDATE`はSロックではなくXロックを取る点に注意。トランザクション分離レベル(READ UNCOMMITTED〜SERIALIZABLE)でロック取得タイミングが変わる。
理論的背景
ロックベースの並行性制御はトランザクションのACID特性のうち「Isolation(独立性)」を保証する代表的手法。2相ロッキングプロトコル(2PL: Two-Phase Locking)が基本で、①ロック獲得相→②ロック解放相、と段階を分けることで直列化可能性(serializability)を保証する。Strict 2PL ではコミット/ロールバック時まで全ロックを保持し、カスケードアボートを防ぐ。
共有ロック(S)と専有ロック(X)に加え、インテンションロック(IS, IX, SIX)が階層ロック(テーブル・ページ・行)の効率化に使われる。マルチグラニュラリティ・ロッキングではテーブル全体にISを取った上で個別行にSを取り、別のトランザクションが同テーブルに対しXを取ろうとした際の判定を高速化する。
実務での使われ方
Oracle/PostgreSQLはMVCC(Multi-Version Concurrency Control)でロック取得を最小化し読み書きの干渉を回避(読み手は古いスナップショットを参照)。一方MySQL InnoDBは行ロック+MVCCのハイブリッド。SQL Serverはロックエスカレーション(行→ページ→表)で過剰ロックを抑制。デッドロックは循環待ちで発生し、DBMSが検出→犠牲者選択→ロールバックで自動解消。アプリ側ではロック取得順序の統一でデッドロックを予防する。
試験での位置づけ
FE・AP・DBスペシャリスト全層で必出。①両立性マトリクス、②2PL、③デッドロック検出と回避、④分離レベル(特にPhantom Read・Non-repeatable Read・Dirty Read)、の4点が主要論点。
選択肢の発展補足
楽観的ロック(Optimistic Locking)はロックを取らずに「更新時に版数で衝突検出」する手法で、Webアプリやマイクロサービスで採用される(例: `version`列でCAS)。悲観的ロックとの使い分けは、競合確率の高低で決まる。NoSQL/分散DBではCAP定理によりロック中心の整合性が困難で、最終的整合性(Eventual Consistency)・補償トランザクション(Saga)・分散トランザクション(2PC/3PC)など別アプローチが必要。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成25年度 秋期 問30/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。