-
Isolation level - 트랜잭션 격리 수준DB 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
- 복잡한 트랜잭션이 많고 데이터 일관성이 최우선인 시스템
'DB' 카테고리의 다른 글
낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) (0) 2024.11.14 DB - 블로킹(Blocking)과 데드 락(Deadlock) (0) 2024.11.11 공유 락(Shared Lock, S-Lock)과 배타 락(Exclusive Lock, X-Lock) (3) 2024.11.10 - Read Uncommitted