[컴][db] PostgreSQL 의 MVCC

 

postgresql / lock mechanism /

PostgreSQL 의 MVCC

postgres 는 ‘여러버전 동시 제어(Multiversion Concurrency Control, MVCC)’ 를 구현했다.

그래서 reading 과 writing 의 lock 이 관련이 없다. 즉, reading 을 위해 lock 이 걸려도, write 를 하는데 지장이 없다. write 은 새로운 version 의 row를 만들테니.

다음은 ref.1 의 정리다.

  • 각 SQL 문은 기초 데이터의 현재 상태와 관계없이 얼마 전의 데이터 스냅샷(데이터베이스 버전)을 보게 된다.
  • 같은 row에 대해 동시에 transaction 들이 발생하면 data 가 일관되지 않게 된다. 이런 일관되지 않은 data(inconsistent data) 를 statement 가 바라보게 되는 것을 막는다.
    • 이것이 각 데이터베이스 세션에 대해 transaction isolation을 제공하게 된다.
  • MVCC는 기존 데이터베이스 시스템의 locking methodologies을 피함으로써 다중 사용자 환경에서 합리적인 성능을 발휘할 수 있도록 lock contention을 최소화한다.
  • lock 대신에 MVCC 를 이용할때의 주요장점
    • MVCC에서 데이터 쿼리(read)를 위해 획득한 lock이 데이터 write를 위해 획득한 lock과 충돌하지 않기 때문에 read가 write를 차단하지 않고 write가 read를 차단하지 않는다는 것이다.
    • PostgreSQL은 Serializable Snapshot Isolation(SSI) level을 사용하여 가장 strictest level의 transaction isolation를 제공하는 경우에도 계속 이것을 보장한다.
  • 테이블 및 row level의 lock 기능도 PostgreSQL에서 사용할 수 있다.
    • 일반적으로 full transaction isolation이 필요하지 않고 특정 conflict 지점을 명시적으로(explicitly) 관리하는 것을 선호하는 애플리케이션들은 이것을 사용하면 된다.
  • 그러나 MVCC를 적절히 사용하면 일반적으로 lock보다 더 나은 성능을 제공한다.
  • 또한 application-defined advisory lock들은, ’single transaction에만 관련이 있는 것이 아닌 lock들’을 획득할 수 있는 메커니즘을 제공한다.

Refrence

  1. PostgreSQL: Documentation: 15: 13.1. Introduction

댓글 없음:

댓글 쓰기