13.1. 소개

PostgreSQL은 여러 작업자가 동시에 자료를 사용하기 위한 풍부한 개발자 도구 세트를 제공한다. 내부적으로 자료 동시성 처리는 다중버전 모델(다중 버전 동시성 제어 Multiversion Concurrency Control, MVCC)을 이용해서 관리된다. 이 기법은 각각의 트랜잭션이 쿼리를 실행하는 시점 기준으로 자료를 스냅숏( 이것을 하나의 데이터베이스 버전이라 함)으로 처리해서, 그 세션이 사용하는 기법이다. 이렇게 함으로 해서, 각각의 트랜잭션은 각각의 버전으로 자료를 처리하게 된다. 이렇게 개별 버전 처리를 트랜잭션 격리 transaction isolation라 한다. 이렇게 여러 버전으로 같은 자료가 변경 되는 경우, 자료 정합성을 구현하기 위해서는 자료에 접근에 대한 잠금 처리가 필요한데, MVCC 기법으로 최소한의 잠금을 사용해서, 다중 사용자 환경에서도 좋은 성능을 낼 수 있도록 한다.

MVCC 기법의 이점은 자료를 기록하는데 잠금을 하지 않기 때문에, 한 세션에서 자료를 기록 하는 중에도 다른 세션에서 자료를 읽는 수 있다는 점이다. PostgreSQL에서는 이 격리 작업의 수준을 세션별로 조절할 수 있으며, 자료 정합성 측면에서 가장 격리 수준이 엄격한 직렬화가 가능한 스냅숏 격리 Serializable Snapshot Isolation (SSI) 수준까지 모두 지원한다.

응용 프로그램 개발자가 자료 정합성을 보장하기 위해서 직접 자료 잠금 기능을 구현할 필요 없이, PostgreSQL에서는 이를 위해 테이블 단위, 혹은 로우 단위 잠금 기능을 제공한다. 한편, MVCC 기법으로 이 부분을 처리하면, 잠금 처리 방법보다 보다 좋은 성능을 보장한다. 물론, 단일 트랜잭션에 종속되지 않는, 응용 프로그램 측에서 사용할 수 있는 잠금 기능도 필요에 따라 사용할 필요도 있을 것이다.