平成25年度 秋期30テクノロジ系

基本情報 平成25年度 秋期 問30:テクノロジ系に関する問題

データベースの排他制御のロック獲得の可能性のうち, 適切なものはどれか。

  • aあるトランザクションが共有ロックを獲得している資源に対して, 別のトランザ クションが共有ロックを獲得することは可能である。正答
  • bあるトランザクションが共有ロックを獲得している資源に対して, 別のトランザ クションが専有ロックを獲得することは可能である。
  • cあるトランザクションが専有ロックを獲得している資源に対して, 別のトランザ クションが共有ロックを獲得することは可能である。
  • dあるトランザクションが専有ロックを獲得している資源に対して, 別のトランザ クションが専有ロックを獲得することは可能である。
正答:Aあるトランザクションが共有ロックを獲得している資源に対して, 別のトランザ クションが共有ロックを獲得することは可能である。

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解説です。

テクノロジ系の他の過去問

1
テクノロジ系
2
テクノロジ系
3
テクノロジ系
4
テクノロジ系
5
テクノロジ系

あなたの弱点を診断して、合格までの最短ルートを

この分野を連続演習し、AIがあなたの弱点を分析。合格ナビなら基本情報の過去問を解きながら学べます。