令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問7
次の(1),(2)に該当するトランザクションの隔離性水準はどれか。
(1) 対象の表のダーティリードは回避できる。
(2) 一つのトランザクション中で,対象の表のある行を2回以上参照する場合,1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
解答・解説
正解: ア. READ COMMITTED
トランザクションの隔離性水準(アイソレーションレベル)において、複数のトランザクションが同時に実行された場合に発生しうる現象(ダーティリード、ノンリピータブルリード、ファントムリード)をどの程度防ぐかが定義されています。
設問の条件をそれぞれ確認します。
(1) 対象の表のダーティリードは回避できる。
ダーティリードとは、他のトランザクションが更新中でまだコミットされていないデータを読み込んでしまう現象です。この条件から、コミットされていないデータを読み込む「READ UNCOMMITTED」は除外されます。(2) 1回目の読込みの列値と2回目以降の読込みの列値が同じであることが保証されない。
これは、同一トランザクション内で同じデータを複数回読み込んだ際、その間に他のトランザクションがデータを更新・コミットすると、読み込む値が変わってしまうノンリピータブルリード(反復不能読込み)が発生するという意味です。この条件から、ノンリピータブルリードを防ぐことができる「REPEATABLE READ」や「SERIALIZABLE」は除外されます。
したがって、ダーティリードは防ぐがノンリピータブルリードは防げない隔離性水準である READ COMMITTED が該当します。
各選択肢の解説
- ア:正解。READ COMMITTED は、コミット済みのデータのみを読み込むためダーティリードは回避できますが、読み込み時のロックを保持しないためノンリピータブルリードは発生しえます。
- イ:READ UNCOMMITTED は、最も低い隔離性水準であり、ダーティリードが回避できないため誤りです。
- ウ:REPEATABLE READ は、トランザクション完了まで読み込んだ行をロックするなどして、同一行の複数回の読み込みで値が同じになること(反復可能読込み)を保証するため誤りです。
- エ:SERIALIZABLE は、最も厳密な隔離性水準であり、ダーティリードだけでなく、ノンリピータブルリードやファントムリードも完全に回避するため誤りです。