일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- spring
- list
- 의존성주입
- 인터페이스
- @Bean
- springboot
- 자동주입
- 객체
- Spring 개발환경 설정
- 빈
- 리액트
- 자바
- 상속
- @transactional
- merge
- Spring legacy Project
- mysql
- 이클립스
- pom.xml
- 스프링 컨테이너
- DI
- java
- react
- 트랜잭션
- github
- JVM
- 어노테이션
- 영속성 컨텍스트
- 깃허브
- 스프링
- Today
- Total
DEVLOG
트랜잭션의 격리 수준(isolation) 본문
트랜잭션의 격리 수준(isolation) 이란?
동시에 여러 트랜잭션이 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
MySQL InnoDB 스토리지 엔진 => REPEATABLE READ 이상 사용 => 부정합 발생X
READ UNCOMMITTED (레벨 0)
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않는 Level
트랜잭션에 처리중인 혹은 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용한다.
데이터베이스의 일관성을 유지할 수 없다.
정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것을 권장한다.
DIRTY READ현상 발생(트랜잭션이 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있게 되는 현상)
READ COMMITTED (레벨 1)
SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 Level
트랜잭션이 수행되는 동안 다른 트랜잭션이 접근할 수 없어 대기하게 된다.
Commit이 이루어진 트랜잭션만 조회할 수 있다.
RDB에서 대부분 기본적으로 사용되고 있는 격리 수준이다.
Dirty Read와 같은 현상은 발생하지 않는다.
하나의 트랜잭션내에서 똑같은 SELECT 쿼리를 실행했을 때는 항상 같은 결과를 가져와야 하는 REPEATABLE READ의 정합성에 어긋난다.
REPEATABLE READ (레벨 2)
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 Level
MySQL에서는 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽게 된다.
트랜잭션이 범위 내에서 조회한 데이터의 내용이 항상 동일함을 보장한다.
따라서, 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정이 불가능하다.
Undo 공간에 백업해두고 실제 레코드 값을 변경한다.
- Undo에 백업된 레코드가 많아지면 MySQL 서버의 처리 성능이 떨어질 수 있다.
이러한 변경방식은 MVCC(Multi Version Concurrency Control)라고 부른다.
PHANTOM READ 현상 발생 (다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안 보였다가 하는 현상으로 이를 방지하기 위해서는 쓰기 잠금을 걸어야 한다.)
SERIALIZABLE (레벨 3)
트랜잭션이 완료될 때까지 SELECT 문장이 사용하는 모든 데이터에 Shared Lock이 걸리는 Level
완벽한 읽기 일관성 모드를 제공한다.
따라서, 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력이 불가능하다.
🙆♂️출처🙇♂️
https://doooyeon.github.io/2018/09/29/transaction-isolation-level.html
트랜잭션 격리 수준(Isolation Level)
트랜잭션 격리 수준과 그에 따른 현상을 이해한다.
doooyeon.github.io
https://nesoy.github.io/articles/2019-05/Database-Transaction-isolation
트랜잭션의 격리 수준(isolation Level)이란?
nesoy.github.io