본문 바로가기
데이터베이스

postgresql mvcc

by 흰색남자 2023. 5. 20.

[ 목적 ]

Postgresql의 MVCC를 이해하고 설명할 수 있다.

 

[ MVCC 란? ]

Multi Version Concurrency Control, 서로 다른 트랜잭션 간 동시에 쓰기, 읽기를 가능케하는 동시성 제어 기법.
  각 트랜잭션이 데이터를 읽을 때 해당 트랜잭션이 볼 수 있는 버전의 데이터만을 제공하기 위해 데이터베이스 시스템은 데이터의 변경을 추적하고 각 변경에 대한 버전을 생성한다.
  트랜잭션이 데이터를 수정할 때는 새로운 버전을 생성하고 이전 버전과의 일관성을 유지할 수 있다.

 

 

[ MVCC 2가지 기법 ] 

1. 데이터베이스 테이블에 업데이트 전/후 모든 버전의 레코드를 저장하여 관리 / PostgreSQL

2. 최신 버전읟 ㅔ이터만 데이터베이스 테이블 내에 저장하고 언두 데이터 영역을 이용하여 이전 버전의 데이터를 재구성함 / MySQL

 

[ PostgreSQL의 MVCC 기법 ]

버전별  레코드를 마킹하여 테이블에 저장해서 SELECT 구문이 들어왔을 경우, 마킹된 레코드로 구분함.

PostgreSQL의 데이터는 위 사진과 같이 저장됨. ( 블록, 페이지는 동의어 )

 

페이지의 자세한 구조를 살펴보면 다음과 같이 구성되어 있음.
크게 4가지 페이지 헤더, LINE 포인터, 튜플 헤더, 튜플 데이터로 구성되어 있음.

LINE 포인터 : 페이지의 튜플 위치를 가르킴
페이지 헤더 : 페이지 번호, 크기, 유형, 트랜젝션 ID, 가용 공간 크기, 트랜잭션 로깅 정보 등을 포함
튜플 헤더 : 튜플 길이 ( 크기 ) , NULL 값 필드 등 // 자세한 정보는 오른쪽 사진 참고.

 

데이터가 삽입되는 과정을 살펴보면,

업데이트

업데이트2

업데이트3

 

 

 

[ 출처 ]

pgDay seoul, Multi Version Concurrency Control In PostgreSQL

 

https://blog.ex-em.com/1764

 

DB 인사이드 | PostgreSQL HOT - 1. Page와 관리

시작하며 PostgreSQL HOT Series에서는 HOT(Heap Only Tuple) Update의 동작과정을 이해하며, 궁극적으로 성능 최적화 및 모니터링 방안을 확립하기 위한 내용을 다룰 예정입니다. 이를 위해, 우선 본 문서에

blog.ex-em.com