격리성 수준(isolation level)

Minji Lee·2025년 3월 26일
0

데이터베이스

목록 보기
3/5

격리성(isolation)

여러 트랜잭션이 동시에 실행될 때 서로 간 영향을 주지 않도록 하는 속성

격리성 위반하는 이상 현상

1. Dirty read

commit되지 않은 변화를 읽음
ex) 기존 데이터: x=10, y=20, 트랜잭션1: x에 y 더하기, 트랜잭션2: y를 70으로 변경

r1(x:10) → w2(y=70) → r1(y:70) → w1(x=80) → commit 1 → abort 2(rollback y=20)

트랜잭션2가 롤백되었지만, 트랜잭션1에서 트랜잭션2가 write한 데이터를 읽음

2. Non-repeatable read

같은 데이터의 값이 달라짐
ex) 기존 데이터: x=10, 트랜잭션1: x를 두 번 읽기, 트랜잭션2: x에 40 더하기

r1(x:10) → r2(x:10) → w2(x=50) → commit 2 → r1(x:50) → commit 1

트랜잭션1이 같은 데이터를 읽었지만 서로 다른 데이터를 반환함

3. Phantom read

없던 데이터가 생김
ex) 기존 데이터: t1(...,v=10), t2(...,v=50), 트랜잭션1: v가 10인 데이터 두 번 읽기, 트랜잭션2: t2의 v를 10으로 변경

r1(v:10=>t1) → w2(t2.v=10) → commit 2 → r1(v:10=>t1,t2) → commit 1

트랜잭션1에서 원래 t1하나만 읽었지만, 트랜잭션2 수행 후 t2 데이터가 생김

위 3가지 현상이 모두 발생하지 않게 만들수 있지만, 제약사항이 많아져 동시 처리 가능한 트랜잭션 수가 줄어들어 DB 전체 처리량이 떨어지는 문제 발생
▶︎ 일부 이상한 현상 허용하는 몇 가지 level 만들어 사용자가 필요에 따라 적절히 선택 → 격리성 수준

격리성 수준(isolation level)

트랜잭션이 다른 트랜잭션과 어느 정도 독립적으로 실행될 것인지 결정하는 설정

격리성 수준? 직렬화?
직렬화는 모든 트랜잭션이 동시에 실행되더라도 순차적으로 실행된 것과 같은 결과를 보장하는 성질로 "이론적인 개념"

격리성 수준은 트랜잭션 간 동시 실행을 조정하여 충돌 방지하는 설정으로 "실제 구현 방법"

isolation levelDirty readNon-repeatable readPhantom read
Read uncommittedOOO
Read committedXOO
Repeatable readXXO
SerializableXXX

트랜잭션 격리성 수준

0개의 댓글