토픽 49 / 201·무결성 및 트랜잭션
Write Skew (쓰기 편향)
Write Skew (쓰기 편향)
Snapshot Isolation에서 두 트랜잭션이 겹치는 데이터를 각각 읽고, 서로 다른 데이터를 수정하여 개별적으로는 제약 조건을 만족하지만 전체적으로는 제약 조건을 위반하는 이상 현상
목적: SI의 한계 이해, Serializable 격리의 필요성 인식
발생 조건: Snapshot Isolation 하에서 두 트랜잭션이 동일 데이터셋을 읽고(겹치는 Read Set), 각자 다른 행을 수정(겹치지 않는 Write Set)하여 First-Committer-Wins에 걸리지 않음
예시
- •의사 당직: 최소 1명 당직 제약, 의사 A·B 동시에 자신의 당직 해제 → 당직 0명(제약 위반)
- •계좌 이체: 두 계좌 합계 ≥ 0 제약, 각각 다른 계좌에서 출금 → 합계 음수
- •예약 시스템: 동일 시간대 중복 예약 제약 위반
SI에서 감지 실패 이유: 각 트랜잭션의 Write Set이 겹치지 않아 쓰기 충돌 미감지, 읽기 스냅샷은 각자의 시작 시점 기준이므로 상대방의 변경을 보지 못함
해결 방법
- •SSI(Serializable Snapshot Isolation): SI 위에 rw-antidependency 추적, 위험한 구조(T1→T2→T3 패턴) 감지 시 롤백, PostgreSQL Serializable 기본 구현
- •명시적 잠금: SELECT FOR UPDATE로 읽기 시 배타적 잠금 획득, 동시 수정 차단
- •물질화 충돌(Materializing Conflicts): 보이지 않는 충돌을 명시적 행으로 변환
비교: Write Skew(다른행수정/SI허용) vs Dirty Read(미커밋읽기) vs Phantom Read(새행삽입) vs Lost Update(같은행덮어쓰기/SI방지)
연관: Snapshot Isolation, MVCC, 격리 수준, SSI, 직렬가능성