반응형
트랜잭션 isolation level
트랜잭션 isloation level은 아래의 4가지 단계로 구분된다.
- read uncommited: commit되지 않은 데이터도 읽을 수 있다
- read committed: commit된 데이터만 읽는다
- repeatable read: 하나의 트랜잭션에서는 하나의 스냅샷만 사용
- serializable: read시에 DML작업이 동시에 진행될 수 없다
- 따라서 read commited의 경우 하나의 트랜잭션에서 같은 쿼리를 두 번 실행하면 처음의 쿼리결과와 두번째 쿼리 결과가 다를 수 있다.
- repeatable read는 하나의 트랜잭션에서 같은 쿼리를 두 번 실행하더라도 두 결과가 동일하다.
여기서 Phantom read란?
Phantom read : 한 트랜잭션 내에서 같은 쿼리를 두 번 수행 시, 첫 번째 쿼리에서 없던 레코드(유령, Phantom)가 두 번째 쿼리에서 발생하는 현상
non-repeatable read와 phantom read는 무슨 차이??
둘 다 한 트랙잭션 내에서 같은 쿼리를 두 번 실행했을 때 처음 쿼리 결과와 두번째 쿼리 결과가 다를 때를 말한다.
- non-repeatable read는 한 레코드의 값이 다른 경우, 즉 달라진 value에 초점
- phantom read는 없던 레코드가 생기거나, 있던 레코드가 없어지는 경우, 즉 레코드의 존재 유무에 초점
repeatable read isolation level에서는 non-repeatable read가 발생하지 않는다.
- 다른 트랜잭션이 수정사항을 commit하더라도, 그 트랜잭션이 자신보다 늦게 생긴 트랜잭션이면 해당 변경사항을 반영하지 않기 때문이다.
반응형
'Database' 카테고리의 다른 글
병행제어(concurrency control)를 하지 않을 때 발생할 수 있는 문제점 (0) | 2023.06.27 |
---|