같은 격리 수준 이름도 구현 축을 확인해야 한다
잠금 기반과 MVCC는 방향을 설명하는 축일 뿐입니다. 실제 DBMS는 일반 읽기, 잠금 읽기, 범위 조건, 직렬화 충돌 감지를 서로 다르게 조합하므로 같은 SQL도 제품과 옵션에 따라 대기하거나 실패할 수 있습니다.
제품명보다 먼저 볼 네 가지 동작
시험용 표의 격리 수준 이름을 외운 뒤에는, 아래 구현 차이가 실제 대기와 재시도를 만든다.
READ UNCOMMITTED는 사실상 READ COMMITTED로 동작한다.
일관 읽기와 잠금 읽기의 차이가 크다.
문장 단위 스냅샷 읽기가 기본 감각이다.
row versioning 옵션에 따라 체감이 달라진다.
문장 또는 트랜잭션 스냅샷에서 읽고 쓰기와 덜 충돌한다.
일관 읽기는 버전을 보지만, 잠금 읽기는 행과 범위를 잠근다.
undo 정보를 이용해 SQL 시작 시점의 일관된 결과를 본다.
기본 READ COMMITTED는 락 중심이고 RCSI를 켜면 버전 읽기다.
SERIALIZABLE은 위험한 의존성을 감지해 한쪽을 실패시킨다.
격리 수준과 인덱스 조건에 따라 next-key/gap lock이 걸린다.
SERIALIZABLE에서 트랜잭션 스냅샷 충돌이 실패로 드러날 수 있다.
SERIALIZABLE은 조건 범위를 key-range lock으로 보호한다.
serialization failure는 애플리케이션 재시도 대상이다.
lock wait timeout과 deadlock을 업무 재시도 정책에 넣는다.
직렬화 충돌은 트랜잭션 재실행으로 다룬다.
락 대기, 데드락, snapshot conflict를 모두 정상 흐름으로 본다.
READ COMMITTED가 문장마다 새 결과를 보는지, 트랜잭션 동안 같은 결과를 보는지부터 확인한다.
인덱스가 부실하면 행 하나가 아니라 조건 범위까지 잠길 수 있어 실행 계획도 함께 봐야 한다.
제품에 따라 대기, key-range lock, SSI 실패처럼 표현만 다르고 재시도 설계는 여전히 필요하다.
같은 격리 수준 이름은 출발점일 뿐입니다. 동시성 품질은 일반 읽기, 잠금 읽기, 범위 보호, 충돌 실패를 제품별로 확인한 뒤 애플리케이션 재시도와 제약 설계까지 연결할 때 안정됩니다.