Isolation Flashcards
트랜잭션의 격리 수준
트랜잭션이 안전하게 수행되기 위해 보장해야하는ACID(원자성, 일관성, 고립성, 지속성) 중 고립성(Isolation)1)에 대하여 성능관련 문제로 인해 유연하게 조절 할 수 있도록 격리 수준을 구분해놓은 것 격리 수준이 낮아지면 성능은 향상되지만 동시성 제어가 되지 않아 문제가 발생 할 수 있음 따라서 DBMS는 다양한 Lock 기법(Locking, timestamp ordering, MVCC)2)을 활용해 트랜잭션 격리 수준에 맞춰 데이터 접근을 통제
격리 수준의 종류와 발생하는 동시성 제어 문제
격리 수준을 높일 경우 성능이 저하되지만 동시성 제어로 인해 일관성(Consistency)이 보장됨 격리 수준을 낮출 경우 성능은 향상되지만 동시성 제어에 문제가 생겨 일관성(Consistency)이 보장되지 않을 수 있음
READ COMMITED
Isolation Level 1에 해당하며 Level 0의 기능에 추가로 오손 읽기(Dirty Read)까지 방지하는 상태 SELECT와 같이 읽기에 대하여 공유 락을 설정하여 오손 읽기를 방지 단, 공유 락이 트랜잭션이 종료되는 Commit, Rollback 시점까지 유지되는 것이 아닌 SELECT 문이 처리되는 순간만 설정되므로 반복 읽기시 중간에 데이터의 갱신(Unrepeatable Read), 삽입(Phantom Data Read) 에 의해 문제 발생
READ UNCOMMITED
Isolation Level 0에 해당하며 기본적인 갱신 손실(Lost Update)만 방지하는 상태 UPDATE와 같이 갱신에 대하여 배타적 락을 설정하여 갱신 손실을 방지 어떤 트랜잭션이 Commit, Rollback 으로 종료되지 않아도 다른 트랜잭션에서 데이터 참조 가능 SELECT시 공유 락을 설정하거나 체크하지 않기 때문에 다른 트랜잭션이 갱신하면서 설정한 배타적 락을 무시하고 변경 중인 데이터를 참조하거나(Dirty Read), 참조중인 데이터를 변경하는 문제(Unrepeatable Read), 추가 삽입 되는 데이터 문제(Phantom Data Read) 등이 발생