DB

Isolation level - 트랜잭션 격리 수준

5linesys 2024. 9. 22. 20:00

1. Isolation Level 이란

트랜잭션의 격리 수준(Isolation Level)이란, 여러 트랜잭션이 동시에 데이터베이스에 접근할 떄, 각 트랜젝션이 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행될 수 있도록 보장하는 수준을 의미한다. 다중 사용자 데이터베이서 환경에서 여러 트랜잭션이 동시에 실행될 때, 트랜잭션이 올바르게 실행되고 DB 의 무결성을 유지하기 위해 

 

2. Isolation Level 의 단계

  • Read Uncommitted
    • 가장 낮은 수준의 isolation level
    • 다른 트랜잭션에서 아직 커밋되지 않은 데이터도 읽을 수 있음
    • 장점: 최고의 성능
    • 단점: Dirty read, Non-repeatable read, Phantom read 발생 가능성 높음
  • Read Comitted
    • 다른 트랜잭션에서 커밋된 데이터만 읽을 수 있음
    • Dirty read는 방지하지만, Non-repeatable read, Phantom read 는 발생 가능
    • 장점: Read Uncommitted 보다 데이터 일관성 높음
  • Reapeatable Read
    • 동일한 트랜잭션 내에서 동일한 데이터를 여러 번 읽을 때 항상 같은 값을 반환
    • Non-repeatable read 는 방지하지만, Phantom read 는 발생 가능
  • Serializable
    • 가장 높은 수준의 isolation level
    • 모든 트랜잭션이 순차적으로 실행되는 것과 동일한 효과를 보장
    • 장점: 가장 높은 수준의 데이터 일관성
    • 단점: 성능 저하

 

Dirty read: 다른 트랜잭션에서 아직 커밋되지 않은 데이터를 읽는 현상
Non-repeatable read: 동일한(하나의) 트랜잭션 내에서 동일한 데이터를 여러 번 읽었을 때 다른 값이 나오는 현상
Phantom read: 특정 조건에 맞는 레코드를 조회했을 때, 다른 트랜잭션에서 새로운 레코드가 추가되어 다시 조회하면 다른 결과가 나오는 현상

 

3. 어떤 상황에 어느 레벨을 적용하면 좋을까?

  • Read Uncommitted
    • 극한의 성능이 요구되는 경우 (예: 실시간 데이터 분석 시스템)
    • 데이터 일관성이 크게 중요하지 않은 경우
  • Read Committed
    • 대부분의 DBMS 에서 default 로 사용되고 있는 격리 수준
    • 대부분의 온라인 트랜잭션 처리 시스템 (OLTP)에서 사용
    • Dirty read를 방지하면서 적절한 성능을 유지
  • Repeatable Read
    • 금융 시스템 등 데이터의 정확성이 매우 중요한 시스템
  • Serializable
    • 복잡한 트랜잭션이 많고 데이터 일관성이 최우선인 시스템