트랜잭션 격리 수준에 따라 일어날 수 있는 문제
1. dirty read
다른 트랜잭션에서 커밋되지 않은 데이터를 읽을 수 있다.
2. non reapeatable read
다른 트랜잭션에서 변경한 값을 읽어 같은 값을 조회했을 때 다른 값을 읽어올 수 있다.
3. phantom read
다른 트랜잭션에서 변경한 값 때문에 조회할 때 추가된(phantom) 값을 읽어올 수 있다.
격리정책
- read uncommited (level 0)
dirty read 발생
아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는것을 허용한다.
- read commit (level 1)
diryt read 방지
트랜잭션이 종료되기 전까지 다른 트랜잭션에서는 해당 데이터에 접근할 수 없다.
- reapeatable read (level 2)
트랜잭션 처리중 실행한 select절에 shared lock이 걸린다. 즉 조회한 값이 변경되는 것을 허용하지 않는다.
SERIALIZABLE과 다르게 행이 추가되는 것을 막지는 않는다.
non reapeatable read 방지
- serialization (level3)
트랜잭션 처리중 사용한 테이블의 모든 행을 트랜잭션이 접근하는것을 막음
성능문제로 거의 사용하지 않음
https://hudi.blog/transaction-isolation-level/
데이터베이스 트랜잭션 격리 수준과 격리 수준에 따른 문제점
이 포스팅은 우아한테크코스 4기 2022 CS Plant 스터디에서 기술 면접을 대비하기 위해 작성되었습니다. 트랜잭션 격리 수준 복수개의 트랜잭션이 한번에 처리될 때, 특정 트랜잭션이 변경하거나
hudi.blog
스프링에 적용
ex) @Transactional(isolation=Isolation.READ_COMMITTED)
- Isolation (격리 수준 설정)
- Propagation(전파 수준 설정)
- readOnly 속성
- 트랜잭션 롤백 예외 설정
- time-out 설정
https://innovation123.tistory.com/165
[DB / Spring ] @Transactional 세부 설정 - 격리 수준 / 전파 수준 설정
스프링 부트에서는 @Transactional 어노테이션을 이용하여 복잡한 트랜잭션 처리를 단순화한다. 클래스, 메서드 단위로 어노테이션을 추가할 수 있고, 스프링이 AOP를 통해 프락시를 도입하여 트랜
innovation123.tistory.com
'백엔드 > SQL,데이터베이스' 카테고리의 다른 글
쿼리튜닝 N가지 팁 (0) | 2024.07.29 |
---|---|
오라클 TIMESTAMP VS DATETIME 차이 (0) | 2024.07.19 |
시퀀스 채번에 대한 문제 (0) | 2024.07.02 |
쿼리 튜닝 (0) | 2023.08.28 |
오라클 힌트 (0) | 2023.08.25 |
댓글