본문 바로가기
  • A little happiness
백엔드/SQL,데이터베이스

트랜잭션 격리수준(isolation)

by donghuJo 2024. 7. 11.

 

트랜잭션 격리 수준에 따라 일어날 수 있는 문제

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

댓글