Dirty Read

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

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

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

Dirty Read 상태절차도

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

Dirty Read 절차 설명

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

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

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

LevelSELECT설명
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 조정 필요
2 Comments

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^