2023-10-23: Transaction Isolation Level

대휘·2023년 10월 23일
0

TIL

목록 보기
11/11

고립 수준에 따라 발생할 수 있는 이상현상

Dirty Read (오손 데이터 읽기)

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

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

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

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

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

참고

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

profile
학생

0개의 댓글