Phantom Read

1. Phantom Read 원인, 트랜잭션 데이터 공유 문제

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

 

2. 없던 레코드 발생 현상, Phantom Read

(1) Phantom Read의 상태절차도

개념– 한 트랜잭션 내 같은 쿼리를 두 번 수행 시, 없었던 레코드가 두 번째 쿼리에서 발생하는 현상
절차Phantom Read 상태절차도

(2) Phantom Read의 절차 설명

절차트랜잭션Data설명
① ReadB1, Alex– Read 트랜잭션은 총 N개의 레코드를Read
② Write
(Insert)
A1, Alex
2, Bob
– Write 트랜잭션에 의해 신규 Insert 수행하여 레코드 카운트 N+1로 증가
③ ReadB1, Alex
2, Bob
– Read 트랜잭션은 동일 Data에 대해 재수행 하였으나, 처음보다 N+1로 증가
  • 이 외 Read 트랜잭션 작업 중간 Write 트랜잭션이 업데이트/커밋함으로 인해 초기 읽은 data를 다시 읽을 수 없는 Non-repeatable Read가 존재
  • Dirty Read, Non-Repeatable Read, PhantomRead 문제 해결 위해 데이터베이스는 트랜잭션 수준 읽기 일관성 제공

 

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