본문 바로가기

Database General

Oracle / PostgreSQL / MySQL MVCC 매커니즘 비교

 

Oracle / PostgreSQL / MySQL MVCC 매커니즘 비교

항목

Oracle

PostgreSQL

MySQL

TX 식별자

TX 시작 : 트랜잭션 테이블의 위치정보인 XID를 블록의 ITL애 저장

TX 완료 : TX 수행되면서 증가하는 SCN을 트랜잭션 테이블과 ITL에 저장

*XID : 위치 정보

*SCN : 시간 정보

TX 시작 : TX 수행되면서 증가하는 XID를 튜플 헤더의 t_xmin, t_xmax 컬럼에 저장

*XID : 시간 정보

TX 시작 : TX가 수행되면서 증가하는 TRX_ID를 데이터 레코드 헤더에 저장

TX 완료 : TRX_ID를 언두 블록에 저장

*TRX_ID : 시간 정보

Old Version 저장위치

별도로 분리된 언두 세그먼트에 Old Version 저장

동일한 데이터 페이지에 Old, New Version 저장

별도로 분리된 언두 세그먼트에 Old Version 저장

Old Version 포인터

UBA (Undo Block Address)

T_CTID

Roll Pointer

레코드 포인터

Row offset

Line pointer

Directory Slot

페이지 내 레코드 저장 순서

블록의 아래부터 위로 저장

페이지의 아래부터 위로 저장

페이지의 헤더부터 아래로 저장

COMMIT 시점의 Action

블록 클린아웃

튜플헤더 t_nfomask 컬럼에 상태 정보 업데이트

페이지 클린 아웃 없음

언두 블록의 TRX_NO 컬럼에 TRX_ID를 저장

히스토리 리스트 등록

TRX_SYS의 더블링크드 리스트에서 제외

ReadView 사용 여부

Readview 사용하지 않음

Snapshot Structure 사용

Readview 사용

레코드 헤더 크기

3 Bytes +

24 Bytes

18 Bytes +

트랜잭션 리스트 관리

언두 헤더에 위치한 트랜잭션 테이블

V$transaction

./pg_log 디렉토리 아래에 256 Kbytes의 clog 파일들

언두 세그먼트의 언두블록에 저장

TRX_SYS의 TRX_STRUCTURE 더블 링크드 리스트

 

출처 : Oracle, PotgreSQL, MySQL Core Architecture : MVCC 메커니즘과 데이터 블록의 내부 동작 원리 (주)엑셈