X

Dirty Read

I. RDBMS의 트랜잭션 데이터 공유 문제

트랜잭션 발생 문제 동시 접근
A B
Read Read 읽기만 수행 시 발생 문제 없음 허용
Read Write Dirty, Non-Repeatable, Phantom Read 허용/불가
Write Write Lost Update 불가
  • Read와 Write 트랜잭션이 하나의 data에 동시에 접근 시 일관성을 훼손하는 Dirty Read, Phantom Read 등 문제 발생 가능

II. 결과값이 상이한 현상, Dirty Read

Dirty Read 상태절차도

개념 – 변경 후 아직 Commit 되지 않은 값 읽고, Rollback 후의 값을 다시 읽어 최종 결과 값이 상이한 현상
절차

Dirty Read 절차 설명

절차 트랜잭션 Data 설명
① Write B S=200 – write 트랜잭션이 공유 데이터의 value를 update하고 커밋되지 않아 Disk 미반영
② Read A S=200 – Read 트랜잭션은 커밋되지 않은 Dirty Page Data Read
③ Rollback B S=100 – Write 트랜잭션이 Rollback되어 Data Undo 수행
④ Read A S=100 – Read 트랜잭션 동일 Data를 Re-Read 수행, ②결과 상이
  • 하나의 Read 트랜잭션이 ②, ④에서 Read한 동일 data에 대한 결과 값이 서로 상이

III.동시성 제어 문제 해결 위한 Isolation Level

동시성 제어 문제 해결 위한 Isolation Level (ANSI/ISO Standard)

Level SELECT 설명
Read Uncommitted 공유 LOCK 없음 – 트랜잭션이 커밋되지 않은 데이터를 다른 트랜잭션 Read 허용
Read

Committed

공유 Lock 설정 후 완료 시 해제 – 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용
Repeatable

Read

공유 Lock 설정 후 트랜잭션 끝까지 유지 – 선행 트랜잭션이 읽은 데이터를 종료 시 까지 갱신/삭제 불허
Serializable 공유 Lock 설정 후 트랜잭션 끝까지 유지 – Index에 공유 Lock설정하여 다른 트랜잭션의 INSERT문까지 금지
  • UPDATE는 배타적 Lock 설정, 대부분의 RDBMS는 Lock 매커니즘을 통해 Isolation Level 제공

트랜잭션 Isolation Level 수준에 따른 발생 현상

  • 대부분의 RDBMS는 Lock 매커니즘으로 구현하여 Isolation Level 증가할수록 성능 저하가 발생
  • 따라서 업무의 트랜잭션 수준을 고려하여 Isolation Level 조정 필요
Categories: 데이터베이스
도리:

View Comments (2)