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
반응형