基本情報 平成25年度 春期 問32:テクノロジ系に関する問題
表は, トランザクション1 <で3 が資源 A てC にかけるロックの種別を表す。また., 資源へのロックはトランザクションの開始と同時にかけられる。トランザクション 1 て3 のうち二つのトランザクションをほば同時に開始した場合の動きについて, 適切 な記述はどれか。ここで, 表中の“ー” はロックなし, “S”は共有ロック, “"X” は専 有ロックを示す。 トランザクション ん B C 1 S 0 2 S X っ 3 X S ー
- aトランザクション 1 の後にトランザクション 3 を開始したとき, トランザクショ ン 3 の資源待ちはない。
- bトランザクション 2 の後にトランザクション 1 を開始したとき, トランザクショ ン 1 の資源待ちはない。正答
- cトランザクション 2 の後にトランザクション 3 を開始したとき, トランザクショ ン 3 の資源待ちはない。
- dトランザクション 3 の後にトランザクション 1 を開始したとき, トランザクショ ン 1 の資源待ちはない。
AI解説(初心者・標準・上級)
理解度に合わせて3レベルの解説を無料で読めます。
答えは b です。
ロックとは「他の人が同じデータをいじれないようにする鍵」。種類は2つ:
- S(共有ロック):「みんなで読んでOK、書き換えはダメ」
- X(専有ロック):「自分だけ使う、他の人はアクセス禁止」
トランザクション2が資源Bに専有ロック Xをかけている時、トランザクション1が同じ資源Bを使おうとすると共有Sでも待たされます…が、本問の表ではトランザクション1とトランザクション2が互いに資源待ちなしで進められる組み合わせが選ばれています。
👉 覚え方:「Xロックは1人占め、Sロックはみんなで共有OK」。
トランザクション2の後にトランザクション1を開始すれば、両者で衝突する強いロックが噛み合わず資源待ちなしという結果に。
なぜこれが正解か
正解は b。表より各トランザクションのロック状況を整理(A/B/C):
- T1: S / − / X
- T2: S / X / −
- T3: X / S / −
ロックの両立可能性:
- S vs S:両立可(両者が読み取り)
- S vs X:衝突(待ち発生)
- X vs X:衝突
T2 の後に T1 を開始する場合:
- 資源A:T2が S、T1も S → 両立可
- 資源B:T2が X、T1は何もしない → 待ちなし
- 資源C:T2は何もしない、T1が X → 待ちなし
→ T1 は資源待ちなしで開始できる。
各選択肢の解説(衝突発生の組み合わせ)
- a T1後T3:資源AでT1のS と T3のXが衝突→ T3 待ち発生
- c T2後T3:資源BでT2のXとT3のSが衝突→ T3 待ち
- d T3後T1:資源AでT3のXとT1のSが衝突→ T1 待ち
覚え方・ひっかけ注意
ロック両立性表(Compatibility Matrix)を覚える:「S+S=◯、S+X=×、X+X=×」。各資源ごとに先行トランザクションのロックを書き出し、後続トランザクションの要求と照合するのが解法。デッドロック検出問題も同じロジックで解ける。
理論的背景
トランザクションのロック制御はACID特性のうち独立性(Isolation)を保証する機構。2相ロッキング(2PL: Two-Phase Locking)が古典理論:成長相(ロック獲得のみ)→縮退相(ロック解放のみ)の順序を守ることで直列化可能性(serializability)を保証する。ロック粒度はテーブル単位・ページ単位・行単位とトレードオフ(粒度が細かいほど並行性UPだがオーバーヘッド増)。ロック種別は以下が標準:
- S(Shared):読み取り用、複数同時可
- X(eXclusive):書き込み用、単独
- IS/IX(Intent Shared/Exclusive):階層ロックの意図表明
- U(Update):S→X 昇格予定(デッドロック回避)
両立性マトリクスにより衝突判定。
実務での使われ方
Oracle・SQL Server・PostgreSQLは行レベルロックが標準で、SELECT文は通常ロック取得しない(MVCC: Multi-Version Concurrency Controlで読み取り一貫性を保証)。MySQL InnoDBもMVCC+行ロック。トランザクション分離レベルは4段階(READ UNCOMMITTED/READ COMMITTED/REPEATABLE READ/SERIALIZABLE)で、レベルに応じてダーティリード・反復不能読み取り・ファントムリードが発生し得る。デッドロックは循環待ちで発生し、検出後はrollback対象を選定。
試験での位置づけ
FE・APデータベース分野の頻出テーマ。ACID特性、トランザクション分離レベル、デッドロック検出(待ちグラフのサイクル検出)、リカバリ機構(WAL、チェックポイント、ロールバック・ロールフォワード)と関連付けて出題。応用情報・データベーススペシャリストでは具体的なSQL構文(SELECT FOR UPDATE)、楽観的ロック vs 悲観的ロック、分散トランザクション(2PC)まで踏み込む。
関連事項・発展補足
本問の選択肢設計はロック両立性マトリクスの理解度をピンポイントで測る典型。実務ではアプリ側で (1) ロック順序の統一(デッドロック防止)、(2) トランザクションを短時間に保つ、(3) インデックス設計で対象行を絞る、(4) 楽観的ロック(バージョン列)の併用が定石。NoSQL/NewSQLではSagaパターン(補償型トランザクション)、MVCC実装(Google Spanner、CockroachDBのTrueTime)など、従来ロックの限界を超える設計が主流化。本問のような机上トレース問題は、デバッグ時のロック競合解析や、本番障害時のロック解析(SHOW ENGINE INNODB STATUS、pg_locks)に直結する実務スキルでもある。
出典:IPA(情報処理推進機構)公式 基本情報技術者試験 平成25年度 春期 問32/ 公的機関配布資料につき出典明記の上引用。解説は合格ナビによる独自AI解説です。