트랜잭션 격리레벨
트랜잭션(Transaction) 격리 수준은 한 트랜잭션에서 변경한 내용을 다른 트랜잭션에 표시하는 방법과 시기를 결정합니다.
SQL에는 네 가지 트랜잭션 격리 수준이 있습니다.
READ UNCOMMITTED
가장 낮은 격리 수준입니다.
이 수준에서 트랜잭션은 아직 커밋되지 않은 다른 트랜잭션에서 쓰고 있는 데이터를 읽을 수 있습니다(
이로 인해 불일치가 발생할 수 있습니다.
READ COMMITTED
이것은 많은 데이터베이스 시스템의 기본 수준입니다.
이 수준을 사용하는 트랜잭션은 트랜잭션이 시작되기 전에 커밋된 데이터만 볼 수 있습니다.
이는 더티 읽기를 방지하지만 여전히 반복 불가능한 읽기 및 팬텀 읽기로 이어질 수 있습니다.
REPEATABLE READ
이 수준은 읽은 데이터가 변경될 수 없도록 보장합니다.
즉, 트랜잭션이 동일한 행을 두 번 읽는 경우 매번 동일한 데이터를 보게 됩니다.
더티 및 반복 불가능한 읽기를 방지하지만 여전히 팬텀 읽기로 이어질 수 있습니다.
SERIALIZABLE
가장 높은 격리 수준입니다.
트랜잭션이 완전히 격리된 방식으로 발생하도록 보장합니다.
즉, 순차적으로 하나씩 실행되는 것처럼 말입니다.
더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 방지합니다.
각 격리 수준에 따라 방지 되는 현상
Dirty Read
트랜잭션이 실행 중인 다른 트랜잭션에 의해 수정되고 아직 커밋되지 않은 행에서 데이터를 읽을 때 더티 읽기가 발생합니다.
트랜잭션이 실패했음에도, 다른 트랜잭션에서 커밋 되지 않은 데이터를 읽는 경우입니다
Non-repeatable Read
반복 불가능한 읽기는 트랜잭션이 동일한 행을 두 번 읽고 행 내의 데이터가 다른 커밋된 트랜잭션으로 인해 읽기 간에 다를 때 발생합니다.
하나의 트랜잭션을 실행 시킬 때, 같은 필드(행)을 다른 트랜잭션에서 읽었는데 결과가 다른 경우이다
시점의 문제이다
팬텀 읽기
트랜잭션이 검색 조건을 만족하는 일련의 행을 반환하는 쿼리를 재실행하고 최근에 커밋된 다른 트랜잭션으로 인해 조건을 만족하는 행 집합이 변경되었음을 발견할 때 팬텀 읽기가 발생합니다.
즉 한 트랜잭션 내에서 같은 쿼리문이 실행되었음에도 불구하고 조회 결과가 다른 경우를 뜻합니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
낙관적 Lock과 비관적 Lock (1) | 2023.06.10 |
---|---|
동시성 제어 (1) | 2023.06.10 |
트랜잭션(Transaction) (0) | 2023.06.10 |
Fan Out On Read (Pull Model) (0) | 2023.06.09 |
Fan Out On Write (Push Model) (0) | 2023.06.09 |