トランザクション・排他制御・分離レベル 重要度:★★★出題: AM2・PM1・PM2
トランザクション分離レベル(Isolation Level)
とらんざくしょんぶんりれべる / Transaction Isolation Level
複数トランザクションの同時実行時に、ダーティリード・ノンリピータブルリード・ファントムリードのどの現象までを抑止するかを規定するSQL標準の4段階レベル。
3行速習ポイント
- READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLEの4段階が存在
- 分離レベルを高めるほどデータの一貫性は高まるが、ロック競合や直列化エラーにより同時実行性(スループット)は低下する
- READ COMMITTEDでのノンリピータブルリード対策にはSELECT ... FOR UPDATEや楽観的排他制御を併用する
図解
図トランザクション分離レベルと防止可能な現象
Level 2
READ COMMITTED
ダーティリードを防止(多くのRDBMSの既定値)
↕
Level 3
REPEATABLE READ
ダーティリード+ノンリピータブルリードを防止
↕
Level 4
SERIALIZABLE
ファントムリードを含むすべての読込み異状を防止
概要と本質
SQL標準では、同時実行されるトランザクション間で発生する不整合現象(ダーティリード、ノンリピータブルリード/ファジーリード、ファントムリード)の許容度合いに応じて4つの分離レベルを定義しています。多くの商用・OSSのRDBMSでは「READ COMMITTED」がデフォルト採用されています。
重要ポイント・コア概念
- ダーティリード:未コミットの更新データを他トランザクションが読み込む現象(READ COMMITTED以上で防止)
- ノンリピータブルリード:同一トランザクション内で同じ行を2回読み込んだ際、他トランザクションの更新コミットにより値が変わる現象(REPEATABLE READ以上で防止)
- ファントムリード:同一トランザクション内で同じ検索条件を実行した際、他トランザクションの挿入・削除コミットにより対象行集合が増減する現象(SERIALIZABLEで防止)
午後I・午後II記述試験での攻略ポイント
午後I・午後IIでは「分離レベルがREAD COMMITTEDのとき、なぜこの処理でノンリピータブルリードやファントムリードが問題になるのか(または問題にならないのか)」が頻出です。『同じ行の複数回の読込みがないから』『参照する行の専有ロックを事前に取得するから』『他トランザクションによる追加行の有無がステップによって異なるから』など、ロック取得タイミングと読込み回数に着目して記述します。
午後記述で使える加点キーワード(クリックでコピー)
この用語が出題された過去問を解く(1分演習)
即時アウトプットで定着令和7年 秋期 午前II 問15
トランザクション T1,T2 を同時実行した際に,次の異状を防ぐことができるトランザクションの隔離性水準のうち,最も水準...
この過去問を解く(1分演習)
令和6年 秋期 午前II 問14
トランザクション P が資源 X の値を 4 から 5 に更新した後にトランザクション Q が開始し, P がコミットす...
この過去問を解く(1分演習)
令和7年 秋期 午後I 問3
SQLの設計とトランザクション排他制御・索引設計...
この過去問を解く(1分演習)
令和6年 秋期 午後I 問2
労務管理システムにおけるSQL設計と排他制御・トランザクション制御...
この過去問を解く(1分演習)
データベーススペシャリスト 過去問演習で実践力を鍛える