平成26年度 春期 午前Ⅱ 問14
トランザクション処理
ダーティリードに関する問題
データベースのトランザクション T2 の振る舞いのうち,ダーティリード(dirty read)に関する記述はどれか。
- アトランザクション T1 が行を検索し,トランザクション T2 がその行を更新する。その後 T1 は先に読んだ行を更新する。その後に T2 が同じ行を読んでも,先の T2 による更新が反映されない値を得ることになる。
- イトランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
- ウトランザクション T2 がある条件を満たす行を検索しているときに,トランザクション T1 が T2 の検索条件を満たす行を挿入する。その後 T2 が同じ条件でもう一度検索を実行すると,前回は存在しなかった行を読むことになる。
- エトランザクション T2 が行を検索し,トランザクション T1 がその行を更新しコミットする。その後 T2 が同じ行を検索した場合,同じ行を読んだにもかかわらず,異なる値を得ることになる。
答えと解説を見る
✓ これが正解イトランザクション T1 が行を更新し,トランザクション T2 がその行を検索する。その後 T1 がロールバックされると,T2 はその行に存在しない値を読んだことになる。
解説
取り消されるかもしれない未確定の更新を読むのが、ダーティリードです。
ダーティリードは、あるトランザクションがまだコミットしていない更新の値を、別のトランザクションが読んでしまう現象です。T1 が行を更新したあと、コミットする前に T2 がその行を読むと、T2 は確定していない値を受け取ります。その後 T1 がロールバックされると、T2 が読んだ値はデータベースに一度も確定しなかった値になります。コミット前の値を読んだかどうかが見分けの軸で、コミット後の値を読んで起きる現象とは区別されます。同時実行で起きる現象は、何を読んだか、いつ読んだかの組で整理すると見分けられます。
ほかの選択肢はなぜ違うのか
- アトランザクション T1 が行を検索し,ト…:T2 の更新が、その後の T1 の更新で上書きされて消えてしまう流れです。読んだ値ではなく書いた値が失われる種類の問題で、コミット前の値を読んでしまう問題とは違います。
- ウトランザクション T2 がある条件を満た…:T2 が同じ条件で2回検索する間に T1 が行を挿入し、2回目に前回なかった行が現れる流れです。これはファントムリードと呼ばれる現象で、コミット前の値を読むこととは関係がありません。
- エトランザクション T2 が行を検索し,ト…:T2 が同じ行を2回読む間に T1 が更新してコミットし、値が変わる流れです。これはノンリピータブルリードと呼ばれる現象で、T2 が読むのはコミット済みの値です。
この問題の用語
- データベースたくさんのデータを決まった形で貯め、探したり書き換えたりできるようにした仕組み。多くの人が同時に使うことを前提にしています。
- トランザクションデータベースへの一連の処理をひとまとめにした単位のこと。途中で失敗すると開始前の状態へ戻され、中途半端な更新が残りません。
出典:平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問14
同じ用語が出る問題
- 令和7年度 秋期 午前Ⅱ 問18:ブロックチェーンに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問17:デッドロックに関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問16(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問15:隔離性水準に関する問題(トランザクション)
- 令和7年度 秋期 午前Ⅱ 問14:べき等に関する問題(トランザクション)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)