1. 트랜잭션 격리 수준
- 동시에 DB에 접근할 때 그 접근을 어떻게 제어할지에 대한 설정
- 레벨(고립도)이 높아질수록 고립도가 올라가서 더 확실한 처리가 가능해지지만 동시에 수행될 수 있는 트랜잭션을 순서대로 처리하게 되어 속도가 느려지게 된다.
2. 트랜잭션의 격리 수준 단계
(1) Read Uncommitted
- 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.
- SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는다.
발생할 수 있는 문제점
- Dirty Read
- Non-Repeatable Read
- Phantom Read
(2) Read Committed
- 트랜잭션이 커밋되어 확정된 데이터만 다른 트랜잭션이 읽도록 허용한다.
발생할 수 있는 문제점
- Non-Repeatable Read
- Phantom Read
(3) Repeatable Read
- 트랜잭션 내에서 쿼리를 두 번 이상 수행할 때, 첫 번째 쿼리에 있던 레코드가 사라지거나 값이 바뀌는 현상을 방지해 준다.
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸린다.
- 다른 사용자는 트랜잭션 영역에 해당하는 데이터에 대한 수정 이 불가능하다.
발생할 수 있는 문제점
- Phantom Read
(4) Serializable Read
- 한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸린다.
- 다른 사용자는 트랜잭션 영역에 해당하는 데이터에 대한 수정 및 입력 이 불가능하다.
3. 낮은 단계의 트랜잭션 격리 수준을 사용할 때 발생하는 현상
- Dirty Read
- 다른 트랜잭션에 의해 수정은 되었지만 커밋이 되지 않은 데이터를 읽는 것
- 다른 트랜잭션이 커밋이 되기 전에 롤백이 된다면 데이터의 비일관성을 가짐
- Non-Repeatable Read
- 한 트랜잭션에서 같은 쿼리를 두 번 수행했을 때, 두 쿼리의 결과가 다르게 나오는 비일관성 현상
- 다른 트랜잭션에서 커밋 전의 데이터를 읽는 쿼리를 수행한 결과와 다른 트랜잭션에서 커밋이 완료된 데이터를 읽는 쿼리를 수행한 결과가 다르게 나옴
- Phantom Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했을 때, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리를 수행했을 때 나타나는 현상
'CS 백엔드 > 데이터베이스' 카테고리의 다른 글
[DB] INDEX 인덱스 (0) | 2023.02.03 |
---|---|
[DB] SQL과 NoSQL (0) | 2023.02.03 |
[DB] 트랜잭션 (0) | 2023.02.01 |
[DB] 데이터 베이스 정규화 (0) | 2023.01.30 |
[DB] 데이터 베이스(Database)의 기본 (0) | 2023.01.29 |