공통 전제

둘 다 MVCC 읽기라서 일반 SELECT는 잠금을 잡지 않습니다. 차이는 스냅샷을 언제 고정하느냐오래된 버전을 유지하는 부담입니다.

Oracle 문장마다 읽기 시점을 다시 잡음 기본 감각은 READ COMMITTED 중심입니다.
InnoDB 같은 트랜잭션 스냅샷을 오래 유지 가능 기본 감각은 REPEATABLE READ 중심입니다.
RC에서
다시 SELECT
새 문장이면 새 스냅샷
SELECT 1
스냅샷 A
SELECT 2
스냅샷 B

같은 트랜잭션이어도 다음 문장은 더 최신 커밋을 다시 볼 수 있습니다.

ReadView도 SELECT마다 새로 생성
SELECT 1
ReadView A
SELECT 2
ReadView B

READ COMMITTED에서는 Oracle과 비슷하게 문장 단위로 읽기 기준이 바뀝니다.

같은 스냅샷을
계속 쓰는가
기본 모델은 아님
핵심 읽기 일관성 기준이 문장 시작 시점에 묶입니다.
의미 트랜잭션 전체가 같은 화면을 계속 보는 구조와는 다릅니다.
REPEATABLE READ면 첫 SELECT 시점으로 고정
첫 SELECT
ReadView A 생성
다음 SELECT
같은 A 재사용

트랜잭션 안에서는 반복 조회 결과를 더 안정적으로 유지합니다.

기본 격리 수준이
주는 감각
READ COMMITTED

매 문장이 시작할 때의 최신 커밋 상태를 기준으로 읽습니다.

REPEATABLE READ

첫 일관성 읽기 기준을 오래 유지해서 같은 트랜잭션 안의 조회를 고정합니다.

오래된 버전을
붙잡는 비용
ORA-01555 위험

긴 읽기 동안 필요한 undo가 덮이면 과거 버전을 재구성하지 못할 수 있습니다.

Undo Log 비대화

purge가 밀리면 히스토리 길이와 공간 사용량이 커집니다.

공통점

일반 SELECT는 둘 다 잠금 없이 읽고, 반대로 쓰기와 쓰기 충돌은 둘 다 행 잠금으로 대기합니다. MVCC가 읽기 경쟁을 줄여도 쓰기 충돌까지 없애지는 않습니다.