스냅샷 격리

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

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

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

각주

  1. “MySQL :: MySQL 8.0 Reference Manual :: 15.5.2.3 Consistent Nonlocking Reads”. 《dev.mysql.com》 (영어). 2018년 8월 27일에 확인함. 
  2. Multiversion concurrency control in MongoDB, MongoDB CTO: How our new WiredTiger storage engine will earn its stripes
  3. Berenson, Hal; Bernstein, Phil; Gray, Jim; Melton, Jim; O'Neil, Elizabeth; O'Neil, Patrick (1995), 〈A Critique of ANSI SQL Isolation Levels〉, 《Proceedings of the 1995 ACM SIGMOD international Conference on Management of Data》, 1–10쪽, arXiv:cs/0701157, doi:10.1145/223784.223785, ISBN 978-0897917315, S2CID 2316540 

참고 문헌

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!