ダーティリードとは?ダーティリード
ダーティリードとは、他のトランザクションがまだコミットしていない更新値を読んでしまう現象。読んだ側は存在しなかった値をもとに判断することになり、書いた側がロールバックすれば根拠ごと消える。汚読、非コミット読みとも呼ばれる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
隔離性を完全に守るほど並行度は落ちるため、SQLは正しさをどこまで崩してよいかを4段階の隔離性水準として選べるようにした。ダーティリードは、その最も緩い段で許してしまう異常現象であり、「どの水準で何が起きるか」の表を読むための基準点になっている。水準を下げて性能を稼ぐ設計判断は、この現象を業務上許せるかどうかで決まる。
具体例
入金処理が未コミットのまま入金額を書き込んでいる最中に、与信チェックがその値を読んで「残高が足りている」と判定してしまう。入金がロールバックされれば、実際には無かった残高で出荷を通したことになる。
試験での引っ掛け
READ UNCOMMITTEDでのみ発生し、READ COMMITTED以上では起きない。防げる異常現象の順序は、ダーティリード→反復不能読取り→ファントムリードで、水準を1段上げるごとに1つずつ消えていく。「コミット済みの値が途中で変わる」のは反復不能読取りであってダーティリードではない。
関連用語
出た過去問
出典:平成31年度 春期 データベーススペシャリスト試験 午前Ⅱ 問9(IPA)
トランザクションの隔離性水準のうち、次の(1), (2)に該当するSQLの指定はどれか。 (1) 対象の表のダーティリードは回避できる。 (2) 一つのトランザ…
正解:READ COMMITTED
要点:READ COMMITTEDはダーティリードのみ防ぎ再読込みは保証しない
READ COMMITTEDはコミット済みのデータしか読まないためダーティリードは起こらないが、読み終えた行を他のトランザクションが更新・コミットすると、同じ行を読み直したときに値が変わり得る。この現象がアンリピータブルリードであり、防ぐにはREPEATABLE READ以上が必要になる。
出典:令和3年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問7(IPA)
次の(1),(2)に該当するトランザクションの隔離性水準はどれか。 (1)対象の表のダーティリードは回避できる。 (2)一つのトランザクション中で、対象の表のあ…
正解:READ COMMITTED
要点:READ COMMITTEDはダーティリードのみ防ぐ隔離性水準
ダーティリード(未コミットの値の読取り)は防げるが、同じ行を読み直すと他トランザクションのコミット済み更新が見えてしまい値が変わり得る、という状態は反復不能読取りが起きる水準である。これに当たるのがREAD COMMITTEDである。
出典:令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問12(IPA)
二つのトランザクションが、同じデータに対して、更新、参照を行うときに発生し得るダーティリードの事象を記述したものはどれか。
正解:まだコミットしていないトランザクションAの更新後データをトランザクションBが参照した。その後、更新後データはロールバックされた。
要点:ダーティリードは未コミット値を読むこと
ダーティリードは、まだコミットされていない他トランザクションの更新途中の値を読んでしまう現象である。その後に元のトランザクションがロールバックすると、読み取った側は現実には存在しなかった値を前提に処理を進めたことになる。隔離性水準をREAD COMMITTED以上にすれば防止できる。
出典・参考
高度試験 午前I(高度午前I 相当)のシラバスの3 技術要素 > 4. トランザクション処理 > (1) 同時実行制御(排他制御)に掲載されている用語です。
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。