2018년 11월 21일
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 조정 필요
2 Comments
잘봤습니다
감사합니당 ㅠㅠ