排他制御とは?はいたせいぎょ
排他制御とは、複数のトランザクションが同じデータを同時に更新するときに、論理的な矛盾が生じないよう、対象データへロックを掛けて他方を待たせる技法。読み取り用の共有ロックは複数のトランザクションが同時に保持できるが、更新用の専有ロックは1つしか保持できない。ロックを掛ける範囲の大きさをロックの粒度と呼び、行単位で細かく掛けるか表単位で粗く掛けるかを選べる。
最終更新:2026-10-09
この語が出る過去問を解く →背景
座席予約で2人が同じ席をほぼ同時に予約すると、双方が「空席」と読んでから書き込むため、二重予約という矛盾が起きる。こうした同時更新の矛盾を防ぐには、更新中のデータに印(ロック)を付けて、ほかの処理を待たせる仕組みが要る。基本情報のデータベース分野では、トランザクション処理が毎回のように出題され、排他制御はその中心にある。用語そのものに加え、ロックの粒度と競合・メモリ使用量の関係や、デッドロック(互いに相手のロック解除を待って止まる状態)が起きない処理順序が問われる。
具体例
1つの表の中の複数行を、2つのトランザクションが並行して更新する場面を考える。表単位でロックを掛けると、互いに別々の行しか触らない場合でも一方が待たされる。行単位なら同時に進められるが、DBMSは行ごとにロック情報を保持するので管理用のメモリを多く使う。単位時間当たりの処理件数を優先するなら細かく、管理コストを抑えるなら粗く、という取捨選択になる。
試験での引っ掛け
粒度の2軸を逆に覚える誤りが最も多い。粗い(表単位)ほど競合が起こりやすく、細かい(行単位)ほどロック情報が増えてメモリを多く使う。粒度を大きくすると1つのトランザクションでかけるロックの個数が増える、同時実行できるトランザクション数が増える、他のトランザクションの参照を妨げなくなる、という選択肢はいずれも逆である。デッドロックの問題では、共有ロックどうしは同時に保持できて互いを待たせないので、待ちが生じるのは専有ロックを要求する更新(update)が絡む組合せだけである。その組合せでのロックの獲得順序を見て循環の有無を判定する。用語の識別では、再編成は断片化した格納構造の作り直し、正規化はテーブル設計の手法、整合性制約は値や関連が満たすべき条件の宣言であって、いずれも実行時の同時実行制御ではない。
関連用語
出た過去問
問題文で直接問われたものと、解説の中で触れられたものが含まれます。
出典:平成28年度 春期 基本情報技術者試験 午前 問30(IPA)
DBMSにおいて,複数のトランザクション処理プログラムが同一データベースを同時に更新する場合,論理的な矛盾を生じさせないために用いる技法はどれか。
正解:排他制御
要点:同時更新の矛盾はロックによる排他制御で防ぐ
複数のトランザクションが同じデータを同時に更新すると、一方の更新がもう一方に上書きされるなどの矛盾が生じる。これを防ぐため、更新中のデータに施錠して他からの操作を待たせる仕組みが排他制御である。ロックの粒度や共有ロック・専有ロックの使い分けによって、矛盾を防ぎつつ並行性をなるべく損なわないよう調整する。
出典・参考
公式シラバスの3 技術要素 > 1. データベース方式 > (2) データベース管理システムに掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。