팬텀 충돌 (Phantom Conflict)

I. 가상 튜플 충돌 현상, 팬텀 충돌의 개요

가. 팬텀 충돌(Phantom Conflict)의 정의

서로 충돌하지 않는 두 개 이상의 트랜잭션이 삽입되려고 하는 가상의 튜플에 의해 충돌이 발생되는 현상
트랜잭션의 일관성이 보장되지 않는 현상

나. 팬텀 충돌의 영향

읽기
수행 시
– 다른 트랜잭션의 삽입으로 처음 읽을 때 없던 튜플이 다음에 읽을 때 나타남
쓰기
수행 시
– 다른 트랜잭션의 삭제 동작으로 처음 쓰기 때 있던 튜플이 재 수행 시 사라짐

 

II. 팬텀 충돌 발생 현상 및 해결 방안

가. 팬텀 충돌 발생 현상

트랜잭션내용
T1SELECT SUM(sal) FROM emp
WHERE dept=’Comp ENG’;
T2INSERT INTO emp(eno, ename, dept, sal)
VALUES(‘e123’, ‘LEE’, ‘Comp ENG’, 500);
T1 → T2T1 수행 결과: T2 결과 튜플 포함되지 않고 계산
T2 → T1T1 수행 결과: T2 결과 튜플 포함되어 계산

– 서로 충돌이 없는 T1, T2 트랜잭션의 실행 결과가 실행 순서에 따라 상이하여 논리적 일관성 깨어짐
– 실제 데이터베이스의 튜플이 아니라 향후 저장될 가상 튜플에 의해 트랜잭션 충돌

나. 팬텀 충돌 해결 방안

방안설명특징
Locking
단위 확대
– Locking 단위를 튜플이 아닌 릴레이션 범위로 확대– Locking 단위 확대에 따라 병행성 감소
Index
Locking
– Locking 규약을 인덱스에 적용– 릴레이션 Index가 만들어져 있어야 함

– 일반적인 DBMS에서는 트랜잭션 격리수준 (Isolation level)을 통해 팬텀 충돌 방지 방법 제공

 

III. 팬텀 충돌 현상 방지 위한 트랜잭션 Isolation level

구분Dirty ReadNon-repeatable
Read
Phantom
Conflict
Read UncommittedOOO
Read CommittedXOO
Repeatable ReadXXO
SerializableXXX

– 팬텀 충돌 방지를 위해 Isolation level은 Serializable 단계 이상으로 설정 필요
 

3 Comments

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^