分離レベルは、同時実行中のトランザクションが互いの未コミット、または進行中の変更をどこまで見られるかを制御します。高い分離レベルほど一貫性は強くなりますが、ロックや競合が増え、並行性と性能は下がりやすくなります。
同時実行で起きる異常
text
DIRTY READ → 他トランザクションの未コミット変更を読む
NON-REPEATABLE READ → 同じ行を再読込したとき値が変わる
PHANTOM READ → 同じ検索を再実行したとき行集合が変わる
これらは複数のトランザクションが同時に動くときに起こり得る問題で、分離レベルはどの問題を防ぐかを決めます。
標準的な 4 つの分離レベル
text
Level | Dirty Read | Non-repeatable | Phantom | Concurrency
──────────────────────────────────────────────────────────────────────
READ UNCOMMITTED | possible | possible | possible| highest (least safe)
READ COMMITTED | prevented | possible | possible| common default
REPEATABLE READ | prevented | prevented | possible|
SERIALIZABLE | prevented | prevented | prevented| lowest (most safe)
上位のレベルほど多くの異常を防ぎます。 は一般的なデフォルトで dirty read を防ぎます。 は最も厳格で、トランザクションが 1 つずつ実行されたかのように振る舞いますが、並行性への制約も大きくなります。
