카샤의 만개시기

Database Isolation Level 본문

Database

Database Isolation Level

SKaSha 2019. 7. 5. 11:52

트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준을 Isolation Level이라고 한다.
Isolation Level을 조정하는 경우 동시성이 증가되는데 반해 데이터의 무결성에 문제가 발생할 수 있거나, 데이터의 무결성을 완벽하게 유지하는 데 반하여 동시성이 떨어질 수 있다.
ANSI에서 작성된 SQL-92 표준은 다음 네 종류의 Isolation Level을 정의하고 있다.
위에서 아래로 내려갈수록 Consistency(일관성)은 향상되지만 Concurrency(동시성)은 저하된다.

  • Read Uncommitted
  • Read Committed
  • Repeatable Read
  • Serializable

Read Uncommitted Isolation Level

쿼리를 수행하는 경우 해당 데이터에 Shared Lock이 걸리지 않는 Level입니다.
따라서, 특정 데이터를 수정하는 동안 다른 사용자는 아직 완료되지 않은(Uncommitted 혹은 Dirty) 데이터를 읽을 수 있습니다.

Read Committed Isolation Level

쿼리가 수행되는 동안 해당 데이터에 Shared Lock이 걸립니다.
데이터를 변경하는 동안 다른 사용자는 해당 데이터에 접근할 수 없으며 commit된 데이터에만 접근 가능합니다.

Repeatable Read Isolation Level

SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리고 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정이 불가능합니다.
하지만 Row를 INSERT하는 것은 가능하므로 동일 트랜잭션에서 Read되는 데이터 수가 달라지는 Phantom 현상이 일어날 수도 있습니다.

Serializable Isolation Level

SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 대한 삽입 및 수정이 불가능합니다.

사용방법

SET TRANSACTION ISOLATION LEVEL {     
    READ COMMITTED |      
    READ UNCOMMITTED |      
    REPEATABLE READ |      
    SERIALIZABLE      
}

Transaction Isolation Level은 데이터베이스 레벨에서 변경 할 수 없고, Session 수준에서만 적용된다.

요약

Isolation Level Dirty Read Nonrepeatable Read Phantom Read
READ UNCOMMITTED Permitted Permitted Permitted
READ COMMITTED Permitted Permitted
REPEATABLE READ Permitted
SERIALIZABLE

Dirty Read

롤백이 되거나, 실행이 끝난지 않은 데이터를 다른 트랜잭션이 읽게 되는 경우

Repeatable Read

특정 트랜잭션에서 질의를 사용했을 때 항상 같은 결과값을 내는 경우이며, 이는 다른 트랜잭션에서 데이터를 변경하더라도 해당된다. 다른 트랜잭션에 의한 변경 사항을 보기 위해서는 새로운 트랜잭션을 사용해야한다.

Phantom Read

다른 트랜잭션에 의해 데이터가 변경되어 특정 트랜잭션에서 내는 결과값이 항상 같지 않고 바뀌는 경우이다.
하지만 mysql의 innoDB 스토리지 엔진을 사용할 경우, MVCC 덕분에 isolation level이 repeatable read 이더라도 phantom read가 발생하지 않는다.
MVCC가 궁금하다면 아래 글을 참조하자.
https://skasha.tistory.com/104

DBMS에서는

MySql의 InnoDB 스토리지 엔진의 기본 Isolation Level은 REPEATABLE READ 이고 Oracle 은 READ COMMITED 이다.
Oracle 은 READ COMMITED 와 SERIALIZABLE 만 지원하며 나머지 두가지 Isolation Level 은 지원하지 않는다.

Comments