Computer Science/데이터베이스
트랜잭션(Transaction) 격리 수준(Isolation Level)
LEDPEAR
2021. 4. 27. 23:45
반응형
동시에 여러 트랜잭션이 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터에 접근 여부를 결정하는 수준이다.
- READ UNCOMMITTED : 각 트랜잭션에서 변경 내용을 COMMIT하거나 ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있다. DIRTY READ 현상 발생
- READ COMMITTED(1단계) : 트랜잭션에서 변경 내용이 있지만 COMMIT이나 ROLLBACK 전에 볼 때 실제 테이블이 아닌 Undo 영역에 백업된 레코드 값을 봄
하나의 트랜잭션내에서 똑같은 쿼리를 실행했을 때 항상 같은 결과를 가져와야하는데 COMMIT을 해버리면 다른 결과가 나오기 때문에 REPEATABLE READ의 정합성에 어긋난다. - REPEATABLE READ(2단계) : 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID 보다 작은 트랜잭션 번호에서 변경한 것만 읽는다. Undo 공간에 백업해두고 실제 레코드 값을 변경. MVCC라고 부른다.
- SERIALIZABLE(3단계) : 가장 단순한 격리 수준이지만 가장 엄격한 격리 수준. 트랜잭션이 실행되기 전에 커밋된 내용만 조회할 수 있다.
- 이상현상
- Dirty Read : 어떤 트랜잭션에서 아직 실행이 끝나지 않은 다른 트랜잭션에 의한 변경 사항을 보게 되는 경우. 만약 원래 트랜잭션에서 그 변경 사항을 롤백하면 그 데이터를 읽은 트랜잭션은 dirty 데이터를 가지고 있다고 말한다.
- Non Repeatable Read : 다른 트랜잭션에서 변경한 내용 때문에 한 트랜잭션에선 항상 같은 결과를 가져와 하는 정합성에 어긋나는 상황
- Phantom Read : 같은 쿼리를 두번 수행 시 첫번째 실행시에 없던 레코드가 갑자기 나오거나 사라지는 현상
Isolation Level | Drity Read | Non Repeatable | Phantom Read |
Read Uncommitted | 가능 | 가능 | 가능 |
Read Committed | 불가능 | 가능 | 가능 |
Repeatable Read | 불가능 | 불가능 | 가능 |
Serializable | 불가능 | 불가능 | 불가능 |
반응형