728x90
트랜잭션 격리 수준은 4가지가 있다.
- SERIALIZABLE
- REPEATABLE_READ
- READ_COMMITTED
- READ_UNCOMMITTED
SERIALIZABLE
- 트랜잭션을 순차적으로 진행하는 것을 말한다.
- 여러 트랜잭션이 동시에 같은 행에 접근 불가
- 교착 상태가 일어날 확률도 많고 가장 성능이 떨어진다.
REPEATABLE_READ
- 하나의 트랜잭션이 수정한 행을 다른 트랜잭션이 수정할 수 없도록 막아주지만 새로운 행을 추가하는 것은 막지 않는다.
- 따라서 이후에 추가한 행이 발견될 수도 있다.
READ_COMMITTED
- 가장 많이 사용되는 격리 수준이다.
- READ_UNCOMMITTED와 달리 다른 트랜잭션이 커밋하지 않은 정보는 읽을 수 없다.
- 즉, 커밋 완료된 데이터에 대해서만 조회를 허용한다.
- 하지만, 어떤 트랜잭션이 접근한 행을 다른 트랜잭션이 수정할 수 있다.
READ_UNCOMMITTED
- 가장 낮은 격리 수준으로, 하나의 트랜잭션이 커밋되지 이전에 다른 트랜잭션에 노출되는 문제가 있지만 가장 빠르다.
- 이는 데이터 무결성을 위해서 되도록 사용하지 않는 것이 이상적이나 몇몇 행이 제대로 조회되지 않아도 괜찮은 거대한 양의 데이터를 ‘어림잡아’ 집계하는 데는 사용하기 좋다.
격리 단계마다 나타나는 현상
- REPEATABLE_READ - 팬텀 리드
- READ_COMMITTED - 팬텀 리드, 반복 가능하지 않은 조회
- READ_UNCOMMITTED - 팬텀리드, 반복 가능하지 않은 조회, 더티 리드
격리 수준에 따라 발생하는 현상
팬텀 리드
- 한 트랜잭션 내에서 동일한 쿼리를 보냈을 때 해당 조회 결과가 다른 경우
반복 가능하지 않은 조회
- 한 트랜잭션 내의 같은 행에 두 번 이상 조회가 발생했는데, 그 값이 다른 경우
더티 리드
- 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었지만 아직 ‘커밋되지 않은’ 행의 데이터를 읽을 수 있을 때 발생한다.
728x90
'CS > ETC' 카테고리의 다른 글
equals와 hashCode는 왜 함께 정의해야 하는가? (0) | 2024.12.17 |
---|---|
일급 컬렉션이 무엇인가요? (0) | 2024.12.07 |