Isolation Level
分離レベル(Isolation Level)は、並行トランザクション間の可視性を定義する。リードアンコミッテッドからシリアライザブルまであり、高いレベルほど強い一貫性を与えるが並行性は下がる。
目的
並行性能と一貫性のバランスを取り、適切な分離レベルを選択する。
メカニズム
リードアンコミッテッド(ダーティリード)、リードコミッテッド(非再現リード)、リピータブルリード(ファントムリード)、シリアライザブル(異常なし)。MVCC はスナップショット分離(リピータブルリードとシリアライザブルの中間)を実現する。PostgreSQL は既定でリードコミッテッド、MySQL InnoDB はリピータブルリードである。
ユースケース
- 並行トランザクションの一貫性制御
- ダーティリード回避のためのリードコミッテッド
- レポート一貫性のためのリピータブルリード
- 強い一貫性のシリアライザブル
例
- 入力
SET TRANSACTION ISOLATION LEVEL READ COMMITTEDOutputAvoids dirty readsPostgreSQL default
よくあるエラー
- Low isolation levels cause non-repeatable/phantom reads
- Choose the isolation level per business needs