본문 바로가기
Computer Science/DB

Transaction_Isolation_level

by 꽃요미 2024. 11. 28.

* Intro

 - 트랜잭션의 Isolation이 제대로 유지되려면 복수의 트랜잭션을 동시에 실행할 경우, 이상 현상이 일어나지 않도록 한다. 

이것을 보장하기 위한 중요한 속성이 Serializability와 Recoverable 임.

 - 하지만 동시에 처리할 수 있는 트랜잭션의 수가 줄어서 DMBS 성능이 하락하는 단점이 존재.

 - 이를 해결하기 위해 DMBS의 concurrency control은 여러 종류의 Isolaton level을 제공함.

 - 정합성과 성능 사이에서 어느정도 타협을 할 수 있음.

 

* 트랜잭션 격리 수준 (Isolation level)

- 세 가지 이상 현상을 정의한 뒤 어떤 현상을 허용하는지에 따라서 Isolation level이 나뉜다.

1) Read Uncommitted (커밋되지 않은 일기)

 - 커밋되지 않은 내용도 조회 가능.

 

2) Read Committed (커밋된 읽기)

 - 다른 트랜잭션에서 커밋된 데이터만 조회할 수 있다.

 - 하지만 어떤 트랜잭션이 접근한 행을 다르 트랜잭션이 수정할 수 있다.

 

3) Repeatable Read (반복 가능한 일기)

 - 트랜잭션에 진입하기 이전에 커밋된 내용만 조회 가능. 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않음.

 

4) Serializable (직렬화 가능)

 - 트랜잭션을 순차적으로 수행

 - 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못 하도록 함.

 

* 격리 주순에 따라 발생하는 현상

 1) Dirty Read

  - 어떠한 트랜잭션에서 처리한 작업이 완료되지 않았음에도 다른 트랜잭션에서 볼 수 있게 되는 현상.

  - '커밋되지 않은' 상태라도 조회한 결과가 바뀌는 것을 뜻함.

 

 2) Non-Repeatable Read (반복 가능하지 않은 조회)

 - 동일한 SELECT 쿼리를 실행했을때 항상 같은 결과를 보장해야 한다는 "Repeatable Read" 정합성에 어긋나는 현상.

 - 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 현상이다.

 

3) Phantom read (팬텀 리드)

 - 한 트랜잭션 내에서 동일한 쿼리를 두 번 보냈을 때, 첫 번째 쿼리에서 존재하지 않던 레코드가 나타나는 현상.

'Computer Science > DB' 카테고리의 다른 글

스키마란?  (1) 2024.12.18
B tree, B+ tree 개념  (0) 2024.12.18
Transaction_and_ACID  (0) 2024.12.18
DB의 Index(인덱스)  (1) 2024.11.28
DB Connections  (1) 2024.11.25