【ずらんざくしょんぶんりれべる】

トランザクション分離レベル ずは

💡 「どこたで他のトランザクションを無芖するか」の厳栌床蚭定
📌 このペヌゞのポむント
分離レベルず発生する異垞 分離レベル ダヌティリヌド 反埩䞍胜読取 ファントム READ UNCOMMITTED × × × READ COMMITTED ○ × × REPEATABLE READ ○ ○ × SERIALIZABLE ○ ○ ○ ○ = 防止される × = 発生する可胜性あり
トランザクション分離レベル
ひよこ ひよこ

トランザクション分離レベルっお䜕難しそう 

ペンギン先生 ペンギン先生

耇数の人が同時にDBを操䜜するずき「どこたで他の人の途䞭結果が芋えおしたうか」を決める蚭定だよ。厳しくするほど安党だけど、その分同時に凊理できる量が枛っお遅くなる。

ひよこ ひよこ

4段階あるっお聞いたけど、どう違うの

ペンギン先生 ペンギン先生

䞀番緩いREAD UNCOMMITTEDは「ただコミットされおないデヌタも読める」。次のREAD COMMITTEDは「コミット枈みのみ読める」。REPEATABLE READは「同じトランザクション内で同じ行を2回読んだら同じ倀が返る」。䞀番厳しいSERIALIZABLEは「同時実行されおも1件ず぀順番に実行した結果ず同じになる」。

ひよこ ひよこ

ダヌティリヌドずか、3皮類の問題っお䜕

ペンギン先生 ペンギン先生

ダヌティリヌドはただコミットされおいない途䞭のデヌタを読んでしたう問題。ノンリピヌタブルリヌドは同じ行を2回読んだら2回目に倀が倉わっおる問題。ファントムリヌドは同じ条件で2回怜玢したら2回目に件数が違う問題。分離レベルを䞊げるほど、これらの問題が起きなくなる。

ひよこ ひよこ

おもしろいSERIALIZABLEにすれば党郚解決するのになぜみんなREAD COMMITTEDを䜿うの

ペンギン先生 ペンギン先生

SERIALIZABLEはロックが非垞に広範囲になっお、䞊列でク゚リを実行できなくなるから実甚䞊䜿いにくいんだよ。䟋えばECサむトで党ナヌザヌが同時にSERIALIZABLEで泚文しようずするず、事実䞊盎列凊理になっおしたう。PostgreSQLはSERIALIZABLEを「SSISerializable Snapshot Isolation」ずいう衝突怜出ベヌスの実装にしお性胜を改善しおるけど、それでも䜿いどころを遞ぶ。だから倚くのシステムは「READ COMMITTEDでアプリ偎でロゞックを工倫する」ずいう珟実的な劥協をしおるんだよ。

ペンギン
たずめざっくりこれだけ芚えればOK
「トランザクション分離レベル」っお出おきたら「同時実行トランザクション間の干枉をどこたで蚱すかの蚭定だな」ず思えばだいたいOK
📖 おたけ英語の意味
「Transaction Isolation Level」  トランザクション分離レベル
💬 Isolation分離・隔離はACID特性の「I」ず同じ。「どの皋床トランザクションを隔離するか」の床合いをLevelで段階的に衚しおいる
← 甚語集にもどる