Mysql & Maria/admin

트랜잭션 격리수준

dbavayne 2023. 11. 29. 13:45

DB 트랜잭션 격리 수준(Transaction isolation level)에 따른 동시성 이슈

가장 낮은 isolation 레벨 0의 경우 lock이 걸리지 않기때문에 속도는 매우 빠르나 동시 접근을 허용하기때문에 데이터 정합성에 문제가 생길 수 있고,

레벨3의 경우 완전히 lock을 걸어 동시 접근을 차단하고 순차적으로 처리 (serializable) 하기 때문에 정합성은 완벽하지만 동시에 처리 할 수 있는 양이 적어 속도가 매우 느리다.

 

Isolation Level Dirty Read Nonrepeatable Read Phantom Read
레벨0 Read Uncommited 발생 발생 발생
레벨1 Read Committed X 발생 발생
레벨2 Repeatable Read X X 발생
레벨3 Serializable X X X

 

트랜잭션 레벨 확인

SHOW VARIABLES LIKE '%transaction_isolation%';

 

Dirty Read ( Read Uncommited ) 

  • 세션1에서 A테이블을 insert 한 후 commit 하지도 않았는데,  세션 2에서 조회하는 상황 가정
  • 세션 1가 해당 변경사항을 commit 하지도 않았는데,  A테이블을 delete 한 후 commit 하지도 않았는데 세션 2에서 조회하면 해당 변경사항을 읽어 들일 수 있게 됨
session1

트랜잭션레벨 설정 READ-UNCOMMITTED


session2

트랜잭션레벨 설정 READ-UNCOMMITTED


데이터 적재


 
  데이터 조회


데이터 삭제


 
  데이터 조회


 

 

Non-Repeatable Read ( Read Committed  )

  • 일반적인 RDBMS 에서 지원하는 트랜잭션 레벨입니다.
  • 트랜잭션을 수행한 세션이 커밋할 때까지, 다른 세션에서는 변경한 내용을 조회하거나 같은 레코드를 변경할 수 없습니다.
  • Unrepeatable Read 가 발생할 수 있습니다.
session1

트랜잭션레벨 설정 READ-COMMITTED
session2

트랜잭션레벨 설정 READ-COMMITTED
데이터적재


 
  데이터조회 (결과 없음)


commit 수행

 
  데이터조회 (결과 있음)

 

 

Phantom Read ( Repeatable Read )

  • 트랜잭션 내에서 다른 트랜잭션이 데이터를 변경 및 커밋했더라도, 트랜잭션 시작 시점의 데이터를 보여주는 트랜젝션 레벨입니다.
  • repeatable Read 에서는 데이터의 변경, 삭제, 추가 작업이 가능합니다.
  • 추가가 가능하기 때문에, 트랜잭션 시작 후, 반복적인 조회작업에서 다른 트랜잭션에서 데이터가 추가되는 경우, 조회 시 데이터가 일치하지 않는 문제가 발생하는 한 현상을 말합니다.
  • 반면 Phantom Read 는 데이터 변경, 삭제는 불가능 하지만 데이터 추가는 가능합니다.
session1

트랜잭션레벨 설정 REPEATABLE-READ
session2

트랜잭션레벨 설정 REPEATABLE-READ
데이터조회

 
  데이터 적재

  commit 수행

데이터 조회

 

 

 

참고 사항

위에 명시된 동시성 이슈가 발생하지 않는다고해서 해당 트랜잭션 격리 수준을 만족시키는 것은 아니다.

반대로 동시성 이슈가 발생하면 해당 트랜잭션 격리수준을 만족 시키지 못한다.
– 예) Repeatable Read 레벨에서 Phantom Read가 발생하지 않는다고 무조건 Serializable 레벨이 될 수 있는 것은 아니다.
– 예) Phantom Read가 발생한다면, 해당 트랜잭션 격리 수준은 Serializable 레벨이 될 수 없다.

 

 

출처

https://mozi.tistory.com/201

https://www.letmecompile.com/mysql-innodb-transaction-model/

'Mysql & Maria > admin' 카테고리의 다른 글

CentOS 7 Maria 10.3 환경구축  (0) 2024.01.31
Mysql xtrabackup 백업 및 복구 (slave 서버 재구성)  (0) 2024.01.11
root 비밀 번호 분실시  (0) 2023.11.28
Mysql lock 종류  (0) 2023.11.26
mysql lock 발생 테스트  (1) 2023.11.26