Study

트랜잭션의 격리 수준(Transaction Isolation Level)

daehwi 2023. 11. 18. 16:01
반응형

격리 수준에 따라 발생할 수 있는 이상현상

1. Dirty Read (오손 데이터 읽기)

데이터의 변경이 끝나지 않은 상황에서 다른 트랜잭션이 데이터를 읽어 잘못된 데이터를 읽는 경우

 

2. Non-Repeatable Read (반복할 수 없는 읽기)

한 트랜잭션 내에서 같은 데이터를 2번 이상 읽었을 때, 다른 값을 읽게되는 경우

 

3. Phantom Read (팬텀 읽기)

한 트랜잭션 내에서 같은 쿼리를 2번 실행했을 때, 없던 데이터가 추가된 경우

 

Isolation Level (격리단계)

Level 0: Read uncommited

Commit 되지 않은 데이터에 대해서 읽기가 가능하다. 따라서 3가지 이상현상 모두 발생 가능하다.

 

Level 1: Read commited

Commit된 데이터에 한해서만 읽기가 가능하다. 하지만 한 트랜잭션이 같은 데이터를 2번 읽는 사이에, 데이터의 변경(commit)이 일어나면 non-repeatable read 문제가 발생하며, 같은 맥락에서 phantom read 문제도 발생 가능하다.

commit 되지 않은 데이터에 접근할 경우
-> Undo에 저장된 이전의 데이터를 읽게된다.

 

Level 2: Repeatable read

한 트랜잭션에서 데이터를 읽는 동안, 다른 트랜잭션은 해당 데이터에 대해 수정/삭제 연산을 할 수 없고, 삽입만 가능하다. Phantom read 문제가 발생할 수 있다.

실제 동작 방식
읽기 연산을 할 때, 트랜잭션 번호가 자신보다 낮은 트랜잭션의 변경사항만 읽고, 그렇지 않으면 Undo에 있는 이전 데이터를 읽어온다.

 

Level 3: Serializable

한 트랜잭션에서 데이터를 읽는 동안, 다른 트랜잭션에서 수정/삭제/삽입이 불가능하다. 가장 높은 고립수준이지만, 동시성이 떨어져서 성능이 하락하게된다.

 

고립 수준을 높게 설정할 수록 이상현상이 일어날 가능성이 줄어들지만, 성능이 하락하는 Trade-off 가 발생한다. 따라서 상황에 맞는 적절한 격리 수준을 사용하는 것이 중요하다.

 

참조

https://code-lab1.tistory.com/52

 

[DB] 트랜잭션의 고립(격리) 수준(Isolation Level) | 고립 수준 예시

트랜잭션의 고립 수준(Isolation Level)이란? 트랜잭션의 고립 수준이란 트랜잭션들끼리 일관성 있는 데이터를 얼마나 허용할 것인지 정해놓은 수준이다. 즉, 트랜잭션 수행 중 다른 트랜잭션이 해

code-lab1.tistory.com

 

반응형