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 메커니즘과 데이터 블록의 내부 동작 원리 (주)엑셈
'Database General' 카테고리의 다른 글
Grafana & Prometheus (그라파나, 프로메테우스) (0) | 2021.05.31 |
---|---|
Oracle PostgreSQL MySQL 데이터 타입 비교 (0) | 2021.04.04 |
데이터베이스 HA(고가용성)와 Sharding(샤딩) (0) | 2021.04.04 |