쏭의 개발 블로그

[DB] Transaction Isolation Level 트랜잭션 고립수준 본문

DB

[DB] Transaction Isolation Level 트랜잭션 고립수준

songu1 2023. 2. 1. 20:55

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

어떤 트랜잭션에서 아직 실행이 끝나지 않은 트랜잭션에 의한 변경사항을 보게 되는 경우

예시

동작

  1. T1이 T2가 쓴 아이템을 읽음
  2. T2가 aborted(철회)됨
  3. T1은 T2의 not committed된 아이템을 읽음

⚠️ T1에서 무효가 된 데이터를 읽음 ⇒ Dirty Read

Read committed

2) Non-Repeatable Read

어떤 트랜잭션이 같은 쿼리를 2번 실행하는데 그 사이에 다른 트랜잭션이 수정/삭제를 하여 같은 쿼리에 다른 값이 나오는 경우

예시

동작

  1. T1 읽음
  2. T2 씀
  3. T1이 T2가 쓴 같은 아이템을 읽음

⚠️ T1에서 2번째 읽을 때 같은 SALARY값을 읽을 수 없다 ⇒ Non-repeatable read

Repeatable read 설정

 

3) Phantom Read

어떤 트랜잭션이 같은 쿼리를 2번 실행하는데 그 사이에 없던 레코드가 추가되어 같은 쿼리에 다른 값이 나오는 경우

예시

  1. T1이 데이터 읽음
  2. T2 데이터 삽입
  3. 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