* 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 |