less than 1 minute read

스냅샷 격리(Snapshot isolation)는 읽기만 가능한 트랜잭션에 매우 효과적인 격리 수준이다. 하지만 데이터베이스에 따라 용어를 다르게 사용하고 있다.

예를 들어, Oracle은 이것을 직렬화가능한(Serializable)이라고 한다. PostgreSQL과 MySQL은 반복적 읽기(repeatable read)라고 부른다.

이러한 네이밍 혼란의 이유는 SQL 표준은 스냅샷 격리의 개념을 가지고 있지 않기 때문이다. SQL 표준은 1975년 System R을 기반으로 만들어졌고, 그 당시는 스냅샷 격리가 발명되지 않았기 때문이다.

SQL이 정의 하는 격리 수준의 정의는 결함이 많고 모호하며 정확하지 않다. 여러 연구에서 반복적 읽기의 형식적인 정의를 하려는 시도가 있었으나, 대부분의 구현방식이 이러한 형식적 정의와 들어맞지 않았다. 게다가, IBM의 DB2는 “직렬화 가능성”을 “반복적 읽기”로 사용하고 있으니, 실상은 누구도 반복적 읽기가 무엇을 의미하는지 모르는 것과 다를 바 없다.