スナップショット分離
各トランザクションが、開始時点のデータベースの一貫したスナップショットを見るトランザクション分離レベル。読み取りロックは不要で、ファントムリードも起きない。
MVCCで実装される。ダーティリード、ノンリピータブルリード、ファントムリードは防ぐが、「ライトスキュー」は防げない。2つのトランザクションが同じ状態Xを読んで判断し、それぞれが書き込んだ結果、全体として不変条件が壊れる現象だ。古典的な例は、少なくとも1人は待機が必要なのに、2人の医師が同時にオンコールを抜けてしまうケース。
Oracle、Postgres(デフォルトはRead Committedだが、Repeatable Readがスナップショットにあたる)、SQL Server、CockroachDBで採用されている。Postgresの「Serializable Snapshot Isolation」(SSI)は実行時にスキューを検出する仕組みを加えたもので、正確性が重要なシステムでは標準的な推奨だ。