종합 비교

DBMS별 MVCC는 버전 저장소와 정리 비용이 다르다

모두 일관 읽기를 위해 과거 버전을 제공하지만, 어디에 버전을 남기고 어떤 기준으로 읽으며 무엇을 청소해야 하는지는 엔진마다 다르다.

오래된 버전을 어디에 두는지가 정리 비용을 가른다 Oracle Undo Segment InnoDB Undo Log PostgreSQL Heap Tuple SQL Server Version Store 긴 읽기 트랜잭션은 각 엔진의 보관소를 붙잡아 purge, vacuum, tempdb 압박으로 드러난다.

Oracle

Undo Segment + SCN

스냅샷 기준
문장 시작 SCN, 필요 시 SERIALIZABLE / READ ONLY
정리 부담
필요한 Undo가 보존되어야 Consistent Read 가능

위험: ORA-01555 Snapshot Too Old

InnoDB

Undo Log + ReadView

스냅샷 기준
트랜잭션 ID와 ReadView의 활성 트랜잭션 목록
정리 부담
Purge가 늦어지면 undo tablespace가 커진다

위험: 긴 조회로 purge 지연, undo 증가

PostgreSQL

Heap Tuple + xmin/xmax

스냅샷 기준
튜플의 xmin/xmax와 트랜잭션 스냅샷
정리 부담
VACUUM이 죽은 튜플을 회수해야 한다

위험: VACUUM 지연, 테이블 bloat

SQL Server

Row Versioning Store

스냅샷 기준
RCSI / SNAPSHOT에서 버전 행을 따라 읽는다
정리 부담
tempdb 또는 PVS의 버전 보관량을 관리한다

위험: version store 증가, tempdb 압박

긴 트랜잭션은 읽기 기준을 붙잡고 정리를 늦춘다

01 스냅샷 생성 SCN, ReadView, xmin/xmax, row version 기준이 고정된다.
02 과거 버전 유지 현재 행과 별도로 필요한 이전 상태를 보관한다.
03 정리 지연 아직 볼 수 있는 버전은 purge, VACUUM, cleanup 대상이 아니다.
04 운영 신호 undo 증가, bloat, version store 증가처럼 공간 압박이 드러난다.
점검 기준

엔진 이름보다 먼저 볼 축

장애 분석에서는 격리 수준 이름보다 버전 저장 위치, 스냅샷 기준, 정리 주체, 오래된 버전 실패 방식을 먼저 맞춰야 한다.

버전 위치
Oracle Undo Segment
InnoDB Undo Log / Undo Tablespace
PostgreSQL 데이터 파일의 Heap Tuple
SQL Server tempdb 또는 Persistent Version Store
가시성 기준
SCN 문장 단위 Consistent Read
ReadView 활성 트랜잭션 목록과 trx_id
xmin/xmax 트랜잭션 스냅샷과 튜플 상태
Row Version RCSI / SNAPSHOT 옵션
격리 메모
RC / Serializable RC는 문장 기준, 트랜잭션 기준은 SERIALIZABLE 또는 READ ONLY
RC / RR RC는 SELECT마다, RR은 첫 consistent read의 ReadView
RC / RR / SSI RC는 문장, RR은 트랜잭션 스냅샷, SERIALIZABLE은 SSI
RCSI / SNAPSHOT RCSI는 문장 기준, SNAPSHOT은 트랜잭션 기준