프로그래밍/MS_SQL

트랜젝션 고립화 수준

GOHA 2012. 6. 25. 20:31
728x90

읽기 일관성은 쿼리가 시작된 시점을 기준으로 데이터를 일관성 있게 읽어들이는 것을 말한다.

일관성을 높이려면 고립화 수준을 높여야 한다.

고립화란?

- 간단히 4가지 고립화를 설명하겠다 -

레벨 0

트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용

(Dirty Read, Non-Repeatable Read, Phantom Read 현상 발생)

레벨 1

더티리드 방지 : 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용

대부분의 DBMS가 기본모드로 채택하고 있음

Non-Repeatable Read, Phantom Read 현상은 여전히 발생

오라클은 락을 사용하지 않고 Undo데이터를 제공하는 방식으로 구현

SQL Server 등은 읽기 공유 락을 이용해서 구현

레벨 2

선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료 될 때까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허함으로써 같은 데이터를 두번 쿼리했을 때 일관성있는 결과를 리턴

Phantom Read 현상은 여전히 발생

오라클은 for update절을 이용해 구현가능

레벨 3

선행 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 중간에 새로운 레코드를 삽입하는 것도 막아줌

완벽한 읽기 일관성 모드를 제공

728x90