스냅샷 격리

스냅샷 격리(Snapshot isolation)는 데이터베이스 및 트랜잭션 처리(트랜잭션 관리)에서 트랜잭션에서 수행된 모든 읽기가 데이터베이스의 일관된 스냅샷을 볼 수 있도록 보장한다(실제로는 시작 당시 존재했던 마지막 커밋된 값을 읽습니다). 트랜잭션 자체는 해당 스냅샷 이후 발생한 동시 업데이트와 충돌하는 업데이트가 없는 경우에만 성공적으로 커밋된다.

스냅샷 격리는 인터베이스(InterBase), 파이어버드, 오라클 데이터베이스, MySQL, PostgreSQL, SQL 애니웨어, MongoDB 및 마이크로소프트 SQL 서버(2005 이상)와 같은 여러 주요 데이터베이스 관리 시스템에서 채택되었다. 이를 채택한 주된 이유는 직렬화 가능성보다 더 나은 성능을 허용하면서도 직렬화 가능성이 방지하는 대부분의 동시성 이상 현상을 방지하기 때문이다(전부는 아님). 실제로 스냅샷 격리는 각 데이터 항목(버전)의 세대 값이 유지되는 MVCC(다중 버전 동시성 제어) 내에서 구현된다. MVCC는 객체가 생성될 때마다 데이터베이스 객체의 새 버전을 생성하여 동시성과 성능을 높이는 일반적인 방법이다. 기록되고 (각 개체의) 여러 마지막 관련 버전에 대한 트랜잭션 읽기 작업을 허용한다. 스냅샷 격리는 ANSI SQL-92 표준의 격리 수준 정의를 비판하는 데 사용되었다. 이는 SQL 표준에서 금지하는 "변칙"을 전혀 나타내지 않지만 직렬화할 수는 없기 때문이다(ANSI에서 정의한 변칙 없는 격리 수준).

직렬화 가능성과의 차이에도 불구하고 오라클에서는 스냅샷 격리를 직렬화 가능(serializable)이라고도 한다.

데이터베이스
동시성 제어
트랜잭션 처리