스냅샷 격리

스냅샷 격리(Snapshot Isolation)는 데이터베이스 관리 시스템에서 동시성 제어를 위한 격리 수준 중 하나로, 트랜잭션이 실행되는 시점에서 데이터베이스의 일관된 "스냅샷"을 기반으로 작업을 수행하는 방식이다. 이 수준은 트랜잭션이 시작되는 순간의 데이터 상태를 기준으로 읽기 작업을 수행하며, 다른 트랜잭션의 중간 상태 또는 커밋되지 않은 변경 사항을 볼 수 없도록 보장한다.

개요
스냅샷 격리는 여러 트랜잭션이 동시에 실행될 때 데이터의 일관성을 유지하면서도 성능을 개선하기 위해 설계된 격리 수준이다. 이 방식은 각 트랜잭션이 데이터베이스의 특정 시점에서의 복사본(스냅샷)에 접근하도록 하여, 읽기 작업이 쓰기 작업에 의해 차단되는 상황을 최소화한다. 이를 통해 비관적 잠금 대신 낙관적 동시성 제어를 사용할 수 있으며, 특히 읽기 중심의 워크로드에서 성능이 우수하다. 다수의 데이터베이스 시스템, 예를 들어 Oracle, PostgreSQL, SQL Server 등에서 스냅샷 격리를 지원하며, 각각 구현 방식은 다소 차이가 있다.

어원/유래
"스냅샷(Snapshot)"은 원래 사진을 순간적으로 찍는다는 의미를 가지며, 정보 기술 분야에서는 특정 시점에서의 시스템 상태를 기록한 것을 의미한다. "격리(Isolation)"는 데이터베이스의 ACID 속성 중 하나로, 트랜잭션이 동시에 실행되더라도 서로의 영향을 최소화해야 한다는 원칙을 말한다. "스냅샷 격리"라는 용어는 이러한 두 개념을 결합하여, 특정 시점의 데이터 상태를 기반으로 트랜잭션을 격리한다는 의미를 내포한다. 이 개념은 1990년대 초반에 다수의 연구와 산업 적용을 통해 정립되었으며, 특히 Oracle의 Multi-Version Concurrency Control(MVCC) 구현에서 초기 형태가 사용되었다.

특징

  • 읽기 일관성 보장: 트랜잭션이 시작된 시점의 데이터 상태를 기준으로 읽기를 수행하므로, 동일한 트랜잭션 내에서 반복적인 읽기 작업 시 일관된 결과를 얻을 수 있다.
  • 읽기-쓰기 충돌 감소: 읽기 트랜잭션은 쓰기 트랜잭션의 잠금을 기다리지 않으며, 별도의 데이터 버전을 통해 접근하므로 성능이 향상된다.
  • phantom read 허용 가능성: 일부 구현에서는 새로운 행 삽입에 의해 동일한 쿼리가 반복 실행될 때 결과 집합이 달라지는 플래그럼 리드(phantom read) 현상이 발생할 수 있다.
  • write skew 문제 가능성: 두 트랜잭션이 서로 다른 데이터를 읽어 같은 조건을 기반으로 변경을 시도할 때, 논리적 일관성이 깨질 수 있는 write skew 현상이 발생할 수 있으며, 이는 직렬화 격리 수준에서만 완전히 방지된다.
  • 다중 버전 저장 필요: 과거 버전의 데이터를 유지해야 하므로 저장 공간과 관리 오버헤드가 발생할 수 있다.

관련 항목

  • 동시성 제어
  • MVCC(Multi-Version Concurrency Control)
  • ACID 속성
  • 직렬화 격리(Serializable Isolation)
  • 반복 가능한 읽기(Repeatable Read)
  • 트랜잭션 처리 시스템
둘러보기

더 찾아볼 만한 주제