CS/ETC

트랜잭션 격리수준

kevin_01 2024. 12. 11. 00:08
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