관리 메뉴

개발 블로그

[데이터베이스]트랜잭션의 동시성과 고립성 본문

전공 공부/데이터베이스

[데이터베이스]트랜잭션의 동시성과 고립성

토산인 2022. 12. 20. 11:56

트랜잭션 고립성 (transaction isolation)

여러 트랜잭션들이 동시에 실행돼도 다른 트랜잭션들로부터 고립되어 실행되는 것처럼 보여야 하는 성질이다. 트랜잭션 고립성은 일반적으로 4단계로 나눈다.

 

1. READ_UNCOMMITTED

2. READ_COMMITTED

3. REPEATABLE_READ

4. SERLALIZABLE

 

1. READ_UNCOMMITTED

이 단계에서는 특정 트랜잭션에서 데이터를 변경했으나 다른 트랜잭션에서 커밋되지 않은 데이터를 읽을 수 있다. 

 

원래는 커밋되어야지 테이블 데이터를 변경할 수 있는데, 커밋 전에 데이터를 읽을 수 있는 이유는 히스토리 로그를 읽어 변경되지 않은 데이터를 읽었기 때문이다. 커밋이 완료되면 변경된 테이블을 읽을 수 있다.

 

2. READ_COMMITTED

이 단계는 특정 트랜잭션에서는 데이터를 변경했어도 커밋 되지 않았으면 변경되기 전의 데이어를 읽을 수 있다.

세션 A에서 데이터를 변경할 때 세션 B에서 데이터를 읽으면, 커밋 전이므로 변경되기 전 테이블을 읽는다. 세션 A가 커밋되면 세션 B는 변경된 데이터를 읽는다. 즉 커밋 전과 커밋 후에 둘다 테이블의 데이터를 읽는다. 

 

3. REPEATABLE_READ

이 단계는 커밋 여부와 상관없이 반복적으로 데이터를 읽어도 트랜잭션 시작 시점의 값을 읽는다. 즉 다른 트랜잭션에서 변경된 데이터의 영향을 받지 않는다.

세션 B는 다른 세션의 트랜잭션의 커밋 여부와 상관없이 트랜잭션 시작 시점의 변경되기 전 값(변경 전 히스토리 로그)을 읽는다. 

 

4. SERLALIZABLE

명시적인 트랜잭션 안에서 데이터를 변경할 때, 명시적인 트랜잭션 내에서 락을 가진 트랜잭션만 접근할 수 있다.