[Oracle]트랜잭션 수준 읽기 일관성
문장수준 읽기 일관성(Statement-Level Read Consistency)
- 쿼리가 시작된 시점을 기준으로 데이터를 일관성 있게 읽어들이는 것을 말한다.
트랜잭션 수준 읽기 일관성(Transaction-Level Read Consistency)
- 트랜잭션이 시작된 시점을 기준으로 일관성 있게 데이터를 읽어들이는 것을 말한다.
트랜잭션 고립화 수준(Transaction Isolation Level)
- 레벨0(= Read Uncommitted)
- 트랜잭션에서 처리중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
- Dirty Read, Non-Repeateable Read, Phantom Read 현상 발생
- Oracle은 이 레벨을 지원하지 않음.
- 레벨1(= Read Committed)
- Dirty Read 방지 : 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용
- 대부분의 DBMS가 기본모드로 채택하고 있는 일관성 모드
- Non-Repeateable Read, Phantom Read 현상 발생
- Oracle은 타 DBMS처럼 Lock을 사용하지 않고 쿼리시작 시점의 Undo데이터를 제공하는 방식으로 구현
- 레벨2(= Repeatable Read)
- 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허함으로써 같은 데이터를 두 번 쿼리했을때 일관성 있는 결과를 리턴
- Phantom Read 현상 발생
- Oracle에서는 이 레벨을 명시적으로 지원하지 않지만 for update 절을 이용해 구현가능
- 레벨3(= Serializable)
- 선행 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 중간에 새로운 레코드를 삽입하는 것도 막아줌
- 완벽한 읽기 일관성 모드를 제공
- 트랜잭션 고립화수준을 레벨 3로 올리는 문장
set transaction isolation level serializable;
Dirty read(= Uncommitted Dependency)
- 아직 커밋되지 않은 수정 중인 데이터를 다른 트랜잭션에서 읽을 수 있도록 허용할 때 발생하는 것
- Oracle에서는 레벨0 수준으로 트랜잭션 고립화 수준을 낮추는 방법을 아예 제공하지 않는다.(Lock을 사용하지 않고, 다중 버전 읽기 일관성 모델을 채택함)
- 다른 DBMS에서는 Lock을 사용해서 동시성 저하 이슈가 발생한다. 이를 해결하기 위해 쿼리에 옵션을 사용해서 Dirty Read를 허용하도록 프로그래밍을 하기도 한다.
Non-Repeatable Read(= Inconsistent Analysis)
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행할 때, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제함으로써 두 쿼리의 결과가 상이하게 나타나는 비일관성(inconsistency)이 발생하는 것
Phantom Read
- 한 트랜잭션 안에서 일정범위의 레코드들을 두 번 이상 읽을 때, 첫번째 쿼리에서 없던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상
- 트랜잭션 도중에 새로운 레코드가 삽입되는 것을 허용하기 때문에 나타나는 현상이다.
오라클은 트랜잭션 고립화 수준을 높이더라도 Lock을 사용하지 않으므로 동시성이 저하되지는 않는다.
https://product.kyobobook.co.kr/detail/S000061696047
오라클 성능 고도화 원리와 해법 1 | 조시형 - 교보문고
오라클 성능 고도화 원리와 해법 1 | 초 대용량 데이터베이스 환경의 여러 차세대 시스템 구축 프로젝트에서 얻은 소중한 경험과 기술 노하우를 널리 전파하기 위해 만든 책이다. 데이터베이스
product.kyobobook.co.kr