트랜잭션을 지원하는 DBMS는 Isolation Level에 따라 트랜잭션을 실행할 수 있게 처리한다. 

다음은 RDBMS가 지원하는 트랜잭션의 Isolation Level과 그 특징을 설명한 것이다. 

 

Isolation Level 설명 Dirty Read Non-Repeatable Read  Phantom Read 고립성(안정성) 동시성
Read Uncommitted 커밋되지 않은 데이터도 읽을 수 있다. O O O 낮다 높다
Read Committed 커밋된 정보만 읽는다.  X O O 중간 중간
Repeatable Read 하나의 트랜잭션에서는 하나의 스냅샷만 사용한다.  X X O 중간 중간
Serializable Read 시에 DML 작업이 동시에 진행될 수 없다.  X X X 높다 낮다

Serializable은 데이터의 안정성에 위배하는 어떤 것도 발생할 수 없을 정도로 높은 고립성을 가지고 있다. 하지만, 그로 인해 동시성이 많이 떨어진다. 그래서, 하나의 데이터영역에 READ가 발생할 때 어떤 DML도 발생할 수 없어서 많은 문제점을 야기 시킨다. 

이러한 문제로 대부분의 RDBMS는 Read Committed나 Repeatable Read로 고립성을 유지하여 트랜잭션을 지원한다. 

 

Read Committed 나 Repeatable Read는 비슷한듯 하지만, 트랜잭션 안에서 다르게 동작하기 때문에 유의해야 한다. 

Read Committed는 하나의 트랜잭션에서 같은 쿼리를 두번 실행하여 데이터를 조회할때 값이 달라질 수 있다. 커밋된 정보를 어떤 제약 없이 읽을 수 있기 때문에 여러 스냅샷 버젼으로 읽는 것이 가능하기 때문이다. 

하지만, Repeatable Read는 하나의 트랜잭션 안에서 하나의 스냅샨 버젼으로만 동작하기 때문에 같은 쿼리를 두번 실행한다 할지라도 동일한 값이 유지된다. 

이 차이를 잘 이해하고 서비스의 트랜잭션을 구현해야 한다. 

 

이제 READ Phenomena에 대해 간단히 알아보도록 하자. 이것을 알면 각 트랜잭션 별 특징을 좀 더 자세히 알 수 있다. 

1. Dirty Read 

이것은 트랜잭션 처리된 작업 의 중간 결과를 볼 수 있는 현상을 말한다. 즉, commit되지 않은 정보를 볼 수 있는 현상을 말하는 것으로 Read Uncommitted Isolation Level일 때 발생하는 Read 현상이다. 

2. Non-Repeatable Read

이것은 한 트랜잭션안에서 같은 쿼리를 두번 실행 했을 때, 다른 값이 나오는 Read 현상을 말하는 것으로, 하나의 트랜잭션안에서 여러 스냅샷이 사용되는 경우를 말한다.  Read-Committed 이하의 Isolation Level에서 나오는 현상이다. 

이 현상은 특정 데이터에 대한 수정이 발생하여 나타나는 Read현상을 말한다. 

3. Phantom Read

이것은 하 트랜잭션 안에서 첫번째 쿼리 수행 결과와 두번째 쿼리 수행 결과가 다른것을 나타내는 것인데 외부에 동시에 실행중인 트랜잭션의 Insert 작업에 의해 발생하는 Read현상을 말한다. 즉, 결과 범위에 속하지 않은 레코드가 외부 작업에 의해 있을 수도 있고, 없어질 수도 있다는 것을 뜻한다. 

 

 

 

 

 

 

'DBMS기초' 카테고리의 다른 글

17. MVCC  (0) 2019.05.24
16. Isolation Level에 따른 트랜잭션 처리 방법  (0) 2019.05.23
15. Lock 기법  (0) 2009.08.17
14. 트랜잭션의 동시성  (0) 2009.05.25
13. 트랜잭션의 상태  (0) 2009.05.25
12. 트랜잭션의 ACID  (0) 2009.03.16
Posted by 모모레

댓글을 달아 주세요