[ 목적 ]
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
'데이터베이스' 카테고리의 다른 글
postgresql의 운영에 필요한 테이블과 wait event (1) | 2023.06.11 |
---|---|
데이터베이스 sequential, scattered (0) | 2023.06.08 |
Postgresql's memory architecture (0) | 2023.05.13 |
데이터베이스 실행 계획, 옵티마이저와 쿼리 최적화 실습 ( feat. mantech ) (1) | 2023.05.04 |
Delete vs Truncate (0) | 2023.04.26 |