【デスペ8問】隔離水準(データベーススペシャリスト)
このNoteには「隔離水準(ISOLATION LEVEL)」について、まとめました。
隔離水準は、WALと同じでデスペで新たに学ぶべき新知識です。
4つの隔離水準と3つの異常で、計7つ覚えねばなりません。午後問題でもできることがあるので、しっかり覚えてください。午後で知識問題で失点はできません。

デスペのAMIIはざっくり5年分解けば、全パターンが把握できます。

私が合格した時に、学習ノートにジャンル毎に問題をまとめました。このNoteの解説は、学習ノートと、私のIT専門学校での授業内容を基にしています。
それでは始めましょう!
トランザクション同時実行による異常と隔離水準
トランザクションの同時実行において、3つの異常が発生します。
ダーティリード:他のトランザクションが更新したがコミットしていない更新値を読み込んだが、他トランザクションがロールバックして更新前の値になり、読み込んだ値と違いが出てしまった。
ノンリピータブルリード:トランザクション処理中に同じデータを読み込んだが、前回と違う値が読み込まれてしまった。処理中に別トランザクションによって変更が行われたため。
ファントムリード:トランザクション処理中に同じデータを読み込んだとき、前回は存在しなかった行が読み込まれた。処理中に別トランザウションによって追加が行われてたため。
隔離性水準とは、トランザクションの同時実行による異常を防ぐ水準です。
READ UNCOMMITTED:3種類全ての異常が発生します。
READ COMMITTED:ダーティリードを防ぎます。
REPEATABLE READ:ダーティリード、ノンリピータブルリードを防ぐ
SERIALIZABLE:3種類全ての異常を防ぐ。
*作図かなhttps://www.db-siken.com/kakomon/24_haru/am2_15.html
問題演習1 | 基本的な問題
隔離水準をREAD COMMITTEDにした時に発生する状態はどれか
ア:ダーティリード、アンリピータブルリード、ファントムリードが発生する
イ:ダーティリードとアンリピータブルリードは発生しないが、ファントムリードが発生する
ウ:ダーティリードは発生しないが、アンリピータブルリードとファントムリードが発生する
エ:ダーティリード、アンリピータブルリード、ファントムリードも発生しない
正答はウ。
READ COMMITTEDでは、ダーティリードだけ防げます。

次の(1)(2)に該当する隔離水準はどれか。
(1):ダーティリードは発生しない
(2):1つのトランザクション中で、ある行を2回以上参照する場合、1回目の読み込みと2回目の読み込みの列値が同じであることが保証されない
ア:READ COMMITTED
イ:READ UNCOMMITTED
ウ:REPEATABLE READ
エ:SERIALIZABLE
平成31年午前2問09より改変
令和03年午前2問07より改変
正答はア。
(1)より、イが消えます。
(2)は、ノンリピータブルリードが発生すること。よって、アのREAD COMMITTEDです。

厳格な2相ロックプロトコルで、表ロックをし、同時実行するトランザクションに影響を与えないようにする隔離水準はどれか
ア:READ UNCOMMITTED
イ:READ COMMITTED
ウ:REPEATABLE READ
エ:SERIALIZABLE
正答はエ。
他のトランザクションとの影響を完全に防ぐには、エのSERIALIZABLEの水準しかありません。

トランザクションT2でダーティリードが発生している記述はどれか。
ア:T1が行を検索し、T2が当該行を更新し、T1はさっきに読み込んだ行を更新する。その後T2が同じ行を読み込んでも、T2による更新が反映されていない値を得る
イ:T1が行を更新し、T2が当該行を検索し、T1がロールバックされた。T2は当該行に存在しない値を読み込んだことになる
ウ:T2が条件を満たす行を検索し、T1がT2の検索条件を満たす行を挿入した。その後T2が同条件で再度検索したとき、前回は存在しなかった行を読むことになる
エ:T2が行を検索し、T1が当該行を更新しコミットした。T2が同じ行を検索したとき、異なる値を得ることになる。
正答はイ。
イ:ダーティリード:他トランザクションによるロールバックが原因
ウ:ファントムリード:他トランザクションによる挿入が原因
エ:ノンリピータブルリード:他トランザクションの更新が原因

トランザクションTAとTBが実行されるとき、ダーティリードの記述はどれか
ア:TAが検索条件を満たす行の集合を参照し、TBがTAと同じ条件を満たす新しい行を挿入しコミットした。TAが同じ条件で再度検索すると前回には存在しなかった行が出現した。
イ:TAがある行の列を参照し、TBが当該列の値を更新しコミットした。TAが当該行を再度参照すると前回の列値とは異なった。
ウ:TAとTBがそれぞれ2相ロックをかけ、デッドロックが発生した。
エ:コミット前のTAの更新後データをTBが参照した後、更新後データはTAによってロールバックされた。
正答はエ。
ダーティリードは、他トランザクションの更新がロールバックによって、前回読み込んだ更新値が、元の値に戻るので不整合が起こることです。
ア:ファントムリード
イ:ノンリピータブルリード
ウ:デッドロックの発生は、隔離水準とは関係ありません。
エ:ダーティロード

トランザクションT1とT2があるとき、次の現象を防ぐ隔離水準のうち最も低い水準のものはどれか。T1が行Xを読み込んだ後、T2が行Xの値を更新しコミットし、T1が行Xを再度読み込むと、前回と異なる値が得られた。
ア:READ COMMITTED
イ:READ UNCOMMITTED
ウ:REPEATABLE READ
エ:SERIALIZABLE
正答はウ。
ノンリピータブルリードを防ぐのは、高い2つの水準です。うち一番低いのはウ「REPEATABLE READ」。

問題演習2 | 少し難しい問題

正答はエ。
データベースにおける「登録」とは新しいデータ(行)の挿入です。
よってT1の処理中に、T2が挿入(②③)することで、T1④でT1①では読み込まれなかった新たな行を読み込んでいるので、ファントムリード。
隔離水準はREAD UNCOMMITTEDなので、どの障害も防げません。


データベーススペシャリスト 令和05年午前2問16より
正答はエ。
不整合なデータの読み込み減らすには、隔離水準を高めます。同時実行による障害を防ぐので、同時実行を待たせることが多くなります。
同時実行できる頻度が減るので、一定時間当たりに実行できるトランザクション数も減ります。
まとめ
お疲れ様でした!
どんぱんがーんとまとめます。

異常現象は以下の通り。
ダーティリード:他のトランザクションが更新したがコミットしていない更新値を読み込んだが、他トランザクションがロールバックして更新前の値になり、読み込んだ値と違いが出てしまった。
ノンリピータブルリード:トランザクション処理中に同じデータを読み込んだが、前回と違う値が読み込まれてしまった。処理中に別トランザクションによって変更が行われたため。
ファントムリード:トランザクション処理中に同じデータを読み込んだとき、前回は存在しなかった行が読み込まれた。処理中に別トランザウションによって追加が行われてたため。
原因もイメージできておくと良いですね。
イ:ダーティリード:他トランザクションによるロールバックが原因
ウ:ファントムリード:他トランザクションによる挿入が原因
エ:ノンリピータブルリード:他トランザクションの更新が原因
現象と原因のどちらかを知っておくだけで違います。私は原因の方を覚えて、どんな現象が起こるかを考えるようにしています。
私が合格してきた勉強法についてもNoteにしました。
まずは書籍の読み倒し方、AMIIの勉強だけでも参考にして頂ければ、嬉しいです。
p.s. 普段は >> 専門学校とIT就職のブログ << をやってます。
でわでわ(・ω・▼)ノシ
いいなと思ったら応援しよう!
学習方法・問題特集のNoteは全て無料提供を続けます▼
もしご覧になったNoteが有益だったり、私の志に共感されたりしましたら、サポート頂けますと励みになります▼
もちろんコメントでも結構です(・ω・▼)ノシ