2018년 11월 23일
Phantom 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. 없던 레코드 발생 현상, Phantom Read
가. Phantom Read 상태절차도
개념 | – 한 트랙잭션 내 같은 쿼리를 두 번 수행 시, 없었던 레코드가 두 번째 쿼리에서 발생하는 현상 |
---|---|
절차 |
나. Phantom Read 절차 설명
절차 | 트랜잭션 | Data | 설명 |
---|---|---|---|
① Read | B | 1, Alex | – Read 트랜잭션은 총 N개의 레코드를Read |
② Write (Insert) | A | 1, Alex 2, Bob | – Write 트랜잭션에 의해 신규 Insert 수행하여 레코드 카운트 N+1로 증가 |
③ Read | B | 1, Alex 2, Bob | – Read 트랜잭션은 동일 Data에 대해 재수행 하였으나, 처음보다 N+1로 증가 |
- 이 외 Read 트랜잭션 작업 중간 Write 트랜잭션이 업데이트/커밋함으로 인해 초기 읽은 data를 다시 읽을 수 없는 Non-repeatable Read가 존재
- Dirty Read, Non-Repeatable Read, Phantom Read 문제 해결 위해 데이터베이스는 트랜잭션 수준 읽기 일관성 제공