分離レベル
同時実行時の分離の度合いを定める SQL 標準のレベル。READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE の四つがある。分離を高めるほど正確になるが、スループットは下がり、ロックや中断が増える。
PostgreSQL の既定は READ COMMITTED、MySQL InnoDB の既定は REPEATABLE READ、Oracle は READ COMMITTED だ。SERIALIZABLE は結果が直列実行と等価になることを保証し、SSI(Serializable Snapshot Isolation)または完全なロックを必要とする。問題となる現象はダーティリード、ノンリピータブルリード、ファントムリードである。近年はスナップショット分離(標準外のレベル)が、ロックなしで「直列化可能に見える」挙動を実現しており、Postgres と MySQL の実装がこれにあたる。ちなみに PostgreSQL の READ COMMITTED は文ごとのスナップショット分離であり、SERIALIZABLE は SSI そのものだ。