트랜잭션 격리수준 (Isolation Level)

목차

트랜잭션 격리수준이란

트랜잭션 격리 수준이란 동시에 여러개의 트랜잭션 처리를 할 때 트랜잭션끼리 얼마나 고립되어 있는지를 나타낸다.
여러개의 트랜잭션이 공유 자원 에 접근해 작업(CRUD) 을 할때 자원의 일관성 을 지키기 위해 트랜잭션 작업을 얼마나 고립시킬지를 나타낸다.

  • Read Uncommited
    • Dirty Read 문제가 발생
  • Read Commited
    • Non-Repeatable Read 문제가 발생
  • Repeatable Head
    • Phantom Read 문제가 발생
  • Serializable

격리 수준에 따른 문제

Dirty Read Non-Repeatable Read Phantom Read
Read Uncommited 발생 발생 발생
Read Commited 발생하지 않음 발생 발생
Repeatable Raead 발생하지 않음 발생하지 않음 발생
Serializable 발생하지 않음 발생하지 않음 발생하지 않음

Read Uncommited

현재 트랜잭션에서 일어난 변경 사항이 Commit 이나 Rollback 되지 않아도 다른 트랜잭션에서 변경된 값을 읽을 수 있다.

  • Dirty Read 현상이 발생
    • Commit 이 일어나기 전에 발생한 변경사항을 다른 Transaction 에서 조회할 수 있는 현상

Read Commited

다른 트랜잭션에서 일어난 변경 사항이 Commit되지 않았으면 Undo 영역 에 저장된 데이터를 읽어온다.

  • Dirty Read가 발생하지 않는다.
  • Non-Repeatable Read 현상이 발생한다.
    • 한 트랜잭션 내에서 같은 데이터를 두번 조회 했을 때 이전 데이터와 일치 하지 않는 데이터 불일치 현상

Repeatable Read

트랜잭션 ID 를 이용해 현재 트랜잭션보다 이전에 일어난 변경사항 만 조회할 수 있다.
즉, 트랜잭션 내에서 조회한 데이터는 트랜잭션 종료 시점 까지 같은 데이터를 반환한다.

  • Phantom Read 가 발생한다.
    - 한 트랜잭션 내에서 같은 데이터를 두번 조회 했을 때 이전에 존재하지 않았던 값이 다시 조회했을 때 나타나는 현상
    - 트랜잭션 도중에 데이터 삽입(Insert) 을 허용하기 때문에 발생하는 문제

    • REPETABLE READ 이하에서만 발생한다

Serializable

가장 높은 격리 수준, 읽기 작업에도 Lock이 걸리게 된다.

  • 데이터를 조회할때 Shared Lock 을 획득해야만 조회할 수 있다.
  • 데이터를 변경할때는 Exclusive Lock 을 획득해야만 변경할 수 있다.
Share