728x90
반응형
transaction isolation level 설명
Read Uncommitted (레벨 0) - 거의 안씀
- 데이터를 읽을 때, 커밋되지 않는 데이터를 읽는다. 즉, 동시성 제어를 안한다.
Read Committed (레벨 1)
- 커밋이 완료된 데이터만 읽을 수 있다.
- Dirty Read 보장
- A, B 트랜잭션이 있고, A 에서 데이터를 변경하고 커밋 전에 B 가 해당 데이터를 읽을 경우 변경된 데이터를 읽을 수 없음.
- Non-Repeatable Read 현상 발생할 수 있음.
- 한 트랜잭션 내에서 같은 쿼리 2번 실행시켰는데, 1번 실행 후, 데이터가 다른 곳에서 변경돼서 커밋됐으면 다시 조회할 때 값이 달라질 수 있음.
Repeatable Read (레벨 2)
- 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허함으로써 같은 데이터를 두 번 쿼리했을 때 일관성 있는 결과를 리턴 하는 것을 말한다.
- Non-Repeatable Read 현상 X
- Phantom Read 현상은 여전히 발생한다.
- 한 트랜잭션 내에서 반복 데이터를 2번 읽을 때 발생하는 현상은 없어지나, 한 트랜잭션 내에서 동일한 쿼리를 2번 실행할 때, 처음에 없던 데이터가 2번째 쿼리에서 발생할 수 있는 현상을 의미함.
Serializable (레벨 3)
- 트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리므로 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력이 불가능.
- Phantom Read 현상 X
- 이 Level에서는 INSERT 작업도 허용하지 않습니다.
요약
- 레벨이 높아질수록 Concurrency 는 높아지고 속도는 느려짐.
- MySQL 은 REPEATABLE-READ, Oracle 은 READ-COMMITED 가 기본 임.
'database' 카테고리의 다른 글
[DB 2편] 페이징 개선(NoOffset) (0) | 2022.04.28 |
---|---|
[DB 1편] UUID 를 기본키로 설정했을 때, DB INSERT 성능 정리 (0) | 2022.04.26 |
spring boot + jpa 환경에서 h2 접속할려는데 file 위치를 못찾는 현상 (0) | 2020.12.21 |
Index 란? (클러스터드, 넌 클러스터드 설명) (0) | 2020.11.15 |
Sql 과 nosql 차이점 그리고 언제 써야하는지 (0) | 2020.11.14 |
댓글