본문 바로가기

DB/MySQL

Isolation Levels

Isolation Levels

한 트랜잭션에서 다른 트랜잭션이 동시에 수행하는 작업을 어느 정도로 보게할 것인지를 결정한다.

DIRTY READ NON-REPEATABLE READ PAHNTOM READ
READ UNCOMMITTED o o o
READ COMITTED x o o
REPEATABLE READ x x o (InnoDB는 x)
SERIALIZABLE READ x x x

READ UNCOMMITTED

한 트랜잭션에서 다른 트랜잭션의 아직 커밋되지 않은 변경사항을 볼 수 있다. Dirty Read를 허용한다.

READ COMMITTED

한 트랜잭션에서 다른 트랜잭션에서의 커밋된 변경사항을 볼 수 있다. Non-repeatable Read와 Phantom Read를 허용한다. 같은 트랜잭션 내에서 데이터를 다시 읽었을 때 다른 결과를 얻을 수 있다.

REAPEATABLE READ

트랜잭션 도중에 같은 데이터를 여러번 읽어도 처음에 읽은 데이터와 동일하게 보장된다. 즉, 한 트랜잭션에서 수행되는 다른 트랜잭션의 변경사항이 이 트랜잭션에 영향을 주지 않는다. Phantom Read를 허용한다.

SERIALIZABLE

모든 트랜잭션을 순차적으로 실행하여 동시성 문제를 완전히 피한다.

DIRTY READ

트랜잭션에서의 변경 내용이 commit, rollback 여부와 상관 없이 다른 트랜잭션에서 보인다.

NON-REPEATABLE READ

하나의 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 두 번째 결과가 달라지는 경우이다. 첫 번째 쿼리와 두 번째 쿼리 사이에 다른 트랜잭션이 해당 데이터를 수정하고 커밋했을 때 발생한다.

PHANTOM READ

한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 첫 번째 쿼리에서 없던 행이 두 번째 쿼리에서 나타나는 경우이다. 첫 번째 쿼리와 두 번째 쿼리 사이에 다른 트랜잭션이 새로운 행을 추가하고 커밋했을 때 발생한다.

'DB > MySQL' 카테고리의 다른 글

바이너리 로그의 복제 데이터 포맷  (1) 2023.11.09
[Real MySQL] 인덱스 (2)  (0) 2023.08.31
[Real MySQL] 트랜잭션과 잠금  (0) 2023.08.31
InnoDB Strage Engine  (0) 2023.03.09
[Real MySQL] 인덱스 (1)  (0) 2023.02.24