본문 바로가기
카테고리 없음

트랜잭션 격리 수준

by Lee_Mc 2024. 11. 6.

트랜잭션 격리 수준이란?

여러 트랜잭션이 동시에 실행될 때 발생할 수 있는 데이터 충돌을 방지하기 위한 것으로 각 단계는 트랜잭션 간에 허용되는 상호작용의 정도를 결정합니다

 

격리단계

1. READ UNCOMMITTED

  • 가장 낮은 수준의 격리단계입니다
  • 다른 트랜잭션에서 커밋되지 않은 데이터까지 읽는 것을 허용합니다.
  • Dirty Read(더티 리드) 문제가 발생할 수 있습니다.
  • 발생 가능한 문제: Dirty Read, Non-repeatable Read, Phantom Read

2. READ COMMITTED

  • 커밋된 데이터만 읽을 수 있습니다.
  • Dirty Read 문제는 방지되지만, Non-repeatable Read(반복 불가 읽기)와 Phantom Read(팬텀 리드) 문제가 발생할 수 있습니다.
  • 발생 가능한 문제: Non-repeatable Read, Phantom Read

3. REPEATABLE READ

  • 트랜잭션이 시작된 이후 데이터가 변경되지 않음을 보장합니다. 같은 트랜잭션 내에서 같은 데이터를 반복해서 읽어도 일관된 값을 얻을 수 있습니다.
  • Non-repeatable Read 문제는 방지되지만, Phantom Read 문제는 여전히 발생할 수 있습니다.
  • 발생 가능한 문제: Phantom Read

4. SERIALIZABLE

  • 가장 높은 수준의 격리단계입니다.
  • 트랜잭션을 직렬적으로 처리합니다.
  • 모든 문제(Dirty Read, Non-repeatable Read, Phantom Read)를 방지할 수 있습니다.
  • 여러 트랜잭션이 동일한 레코드에 동시 접근할 수 없어 성능이 떨어질 수 있고 동시성이 크게 줄어듭니다.

 

각 레벨의 요약표

Isolation Level Dirty Read Non-Repeatable Read Phantom Read
READ UNCOMMITED 가능 가능 가능
READ COMMITTED 불가 가능 가능
REPEATABLE READ 불가 불가 가능
SERIALIZABLE 불가 불가 불가

 

* Dirty Read : 하나의 트랜잭션이 아직 커밋되지 않은 데이터를 다른 트랜잭션에서 읽을 수 있게 되는 상황을 의미합니다

 

  Non-repeatable Read : 하나의 트랜잭션이 같은 데이터를 두 번 읽을 때, 읽는 사이에 다른 트랜잭션이 해당 데이터를 수정하여 데이터가 달라지는 현상입니다.

 

  Phantom Read : 트랜잭션이 데이터 집합을 조회할 때 처음 조회할 때 없던 레코드가 이후에 추가되거나 삭제되는 현상입니다