PREDICATE

팬텀 방지가 어려운 이유

팬텀은 한 행이 아니라 조건 범위를 보호해야 하므로, 일반 행 잠금만으로는 충분하지 않을 수 있다.

행 잠금
범위 잠금
SSI/충돌 감지
Row Lock

이미 존재하는 행을 보호한다. 새로 들어올 행은 별도 범위 보호가 필요하다.

Range / Gap Lock

인덱스 범위를 잠가 조건 안으로 들어오는 INSERT를 제어한다.

Predicate / SSI

조건 충돌을 추적해 직렬화 불가능한 실행을 실패시킨다.

주의: 어떤 방식이 쓰이는지는 DBMS와 격리 수준에 따라 달라진다.