쏭의 개발 블로그
[DB] Transaction Isolation Level 트랜잭션 고립수준 본문
1. 트랜잭션 고립 수준(Transaction Isolation Level)?
트랜잭션들끼리 일관성 있는 데이터를 얼마나 허용할 것인지 정해놓은 수준
- 트랜잭션 수행 중 다른 트랜잭션이 해당 데이터를 조회하는 것이 가능한 정도를 결정해 놓은 것
- 고립수준이 높을수록 일관성 보장 but 동시성 떨어져 성능이 하락
2. 트랜잭션 고립 수준의 종류
1) Read uncommitted (Level 0)
각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관없이 다른 트랜잭션에서 값을 읽을 수 있다.
- 일관성 유지 어려움
- 동시성은 향상
- Dirty Read, Non-Repeatable Read, Phantom Read 발생
2) Read committed (Level 1)
트랜잭션수행이 완료되고 commit된 데이터만 다른 트랜잭션에서 read하도록 허용하는 수준
- 트랜잭션이 작업하는 시점에 lock을 검
- lock을 거는 주체 : 처리 세션 (INSERT, UPDATE)
- 쿼리 세션(SELECT)이 대기
- 대부분 DBMS의 기본적인 고립 수준
- MySql을 해당X
- Non-Repeatable Read, Phantom Read 발생
3) Repeatable read (Level 2)
특정 트랜잭션에서 읽고 있는 데이터를 다른 트랜잭션에서 수정/삭제가 불가능
- 삽입은 가능함
- 트랜잭션이 작업하는 시점에 lock을 검
- lock을 거는 주체 : 쿼리 세션 (SELECT)
- 처리 세션 (INSERT, UPDATE)이 대기
- MySql의 기본적인 고립 수준
- Phantom Read 발생
4) Serializable (Level 3)
모든 동작이 직렬화하게 작동
- 최상위 고립수준
- 특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삭제/삽입 불가
- 데이터의 안정성이 매우 중요한 특수한 상황이 아닌 이상 거의 사용하지 않음
고립 수준 | Dirty Read | Nonrepeatable Read | Phantom Read |
Read uncommitted | ⭕ | ⭕ | ⭕ |
Read committed | ❌ | ⭕ | ⭕ |
Repeatable read | ❌ | ❌ | ⭕ |
Serializable | ❌ | ❌ | ❌ |
3. 이상현상
1) Dirty Read
어떤 트랜잭션에서 아직 실행이 끝나지 않은 트랜잭션에 의한 변경사항을 보게 되는 경우
예시
동작
- T1이 T2가 쓴 아이템을 읽음
- T2가 aborted(철회)됨
- T1은 T2의 not committed된 아이템을 읽음
⚠️ T1에서 무효가 된 데이터를 읽음 ⇒ Dirty Read
✅ Read committed
2) Non-Repeatable Read
어떤 트랜잭션이 같은 쿼리를 2번 실행하는데 그 사이에 다른 트랜잭션이 수정/삭제를 하여 같은 쿼리에 다른 값이 나오는 경우
예시
동작
- T1 읽음
- T2 씀
- T1이 T2가 쓴 같은 아이템을 읽음
⚠️ T1에서 2번째 읽을 때 같은 SALARY값을 읽을 수 없다 ⇒ Non-repeatable read
✅ Repeatable read 설정
3) Phantom Read
어떤 트랜잭션이 같은 쿼리를 2번 실행하는데 그 사이에 없던 레코드가 추가되어 같은 쿼리에 다른 값이 나오는 경우
예시
- T1이 데이터 읽음
- T2 데이터 삽입
- T1 데이터 읽음
https://wonit.tistory.com/463#recentComments
[데이터베이스] Isolation Level, 고립 수준
Isolation Level, 고립 수준에 대해서 이해하기 위해서는 Transaction, 트랜잭션 에 대한 이해가 필요하다. 만약 트랜잭션에 대해서 확실하게 이해를 하지 못 했다면, 확인하고 오는 것을 추천한다! Isolat
wonit.tistory.com
https://ltk3934.tistory.com/104
트랜잭션 - 고립 수준
락은 두 트랜잭션이 (쓰기, 쓰기) 상황일 때 해결하기 위한 것입니다. 하지만 (읽기, 쓰기) 상황일 때는 갱신손실 같은 심각한 문제는 발생하지 않기 때문에 락을 이용해서 처리하기에는 아쉬운
ltk3934.tistory.com
https://code-lab1.tistory.com/52
[DB] 트랜잭션의 고립(격리) 수준(Isolation Level) | 고립 수준 예시
트랜잭션의 고립 수준(Isolation Level)이란? 트랜잭션의 고립 수준이란 트랜잭션들끼리 일관성 있는 데이터를 얼마나 허용할 것인지 정해놓은 수준이다. 즉, 트랜잭션 수행 중 다른 트랜잭션이 해
code-lab1.tistory.com
'DB' 카테고리의 다른 글
[DB] SQL injection (0) | 2023.02.11 |
---|---|
[DB] Redis (0) | 2023.02.11 |
[DB] 트랜잭션(Transaction) (0) | 2023.01.31 |
[SQL] 데이터베이스 - TCL (0) | 2023.01.31 |
[DB] SQL 문법 정리 - DDL, DML (0) | 2023.01.31 |