본문 바로가기
프로그래밍/DB & Redis

[DB] Transaction Isolation Levels과 확인 하기

by 뽀도 2024. 5. 2.

Transaction Isolation Levels

 

 

Transaction Isolation Levels 란 무엇인가?

 

- 동시에 여러 트랜잭션이 처리될 때 각 트랜잭션이 얼마나 서로 고립되어 있는가를 나타내는 수준이다. 

- 표의 아래로 내려갈수록 고립 정도가 높아지고, 성능저하가 야기 된다. 

READ UNCOMMITTED (level 0)
READ COMMITTED
REPEATABLE READ
SERIALIZABLE

※ mysql innodb의 기본은  REPEATABLE READ 이다. ( The default isolation level for InnoDB is REPEATABLE READ.)


ISOLATION LEVEL 확인 

 

쿼리

SELECT @@global.tx_isolation;


결과



 


 

이제 각 레벨에 대해 알아보자 


READ UNCOMMITTED

 

READ UNCOMMITTED 격리수준에서는 어떤 트랜잭션의 변경내용이 COMMIT이나 ROLLBACK과 상관없이

다른 트랜잭션에서 보여지기 때문에 Dirty Read가 발생함

 

READ UNCOMMITTED는 데이터 정합성에 문제가 생기는 격리 수준. 


- (?) Dirty Read : 트랜잭션의 작업이 완료되지 않았는데도 다른 트랜잭션에서 해당 데이터를 읽는 현상

- (?) 데이터 정합성 : 데이터의 값이 서로 일치함 

 

 

READ COMMITTED

 

한 트랜잭션의 변경내용이 커밋(commit) 되어야만 다른 트랜잭션에서 조회가 가능함. 

Select문이 실행되는 동안 Shared lock이 걸림, 조회시에는 실제 테이블 값이 아니라 Undo 영역에

백업된 레코드값을 가져옴!

하지만 하나의 트랜잭션에서 똑같은 Select 쿼리를 실행 했을때 항상 같은 결과를 가져와야 하는 REPEATABLE READ의 정합성에 어긋남 ㅠㅠ, Non-repeatable Read이 발생한다. 



- (?) Undo : 데이터베이스에서 트랜잭션의 롤백 기능을 지원하기 위해 사용되는 공간, 트랜잭션이 실행될 때, 데이터베이스는 해당 트랜잭션에서 변경된 데이터의 이전 버전을 Undo 영역에 저장한다, 이러한 이전 버전의 데이터는 트랜잭션이 롤백될 때 사용되어 데이터를 이전 상태로 복원하는 데 활용됩니당

-(?) Non-repeatable Read : 트랜잭션에서 같은 데이터를 두번이상 읽을때, 첫 번째 읽을때랑 두번째 읽을때 데이터가 변경되는 현상을 말함! 

REPEATABLE READ

 

트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장하는 트랜잭션 격리 수준.

트랜잭션은 고유한 번호를 가지며 undo 영역에 백업된 모든 레코드에는 변경을 발생시킨 트랜잭션의 고유 번호가 포함되어 있음, 하나의 트랜잭션 안에서 일어나는 모든 Select 쿼리는 자신의 트랜잭션 번호보다 작은 번호에서 변경한 사항만 볼 수 있음, 이러한 방식을 MVCC라고 함

 

# 모든 InnoDB의 트랜잭션은 고유한 트랜잭션 번호(순차적으로 증가)를 가지고 있음 

# Phantom Read는 데이터베이스 트랜잭션에서 동시성 제어 문제 중 하나를 가리키는 용어, 트랜잭션이 동시에 여러행을 조회할 때 이전 쿼리에서 반환된 결과와 다른행이 반환되는 현상! 

 



-(?) MVCC : Multi versifon concurrency control 의 약자로, 데이터베이스 시스템에서 동시성 제어를 달성하기 위한 기술중 하나다. 이 기능 덕분에 "일관된 읽기"가 가능하다. 

 

 

 

SERILIZABLE 

 

모든 작업을 하나의 트랜잭션에서 처리하는 것과 같이 동작하는 가장 높은 트랜잭션 격리 수준.

한 트랜잭션에서 읽고 쓰는 레코드를 다른 트랜잭션에서는 절대 접근 할 수 없음. 

 

Phantome Read 문제는 발생하지 않지만, DeadLock에 걸릴 가능성이 존재함.

그리고 동시성 처리 성능이 저하 되기 때문에 신중하게 사용해야 함! 

 

 

 

 

 

참고 )

 

17.7.2.1 Transaction Isolation Levels

 

[DB] Transaction Isolation Level?? 그게 뭔데?

 

[DB] Transaction Isolation Level?? 그게 뭔데?

Transaction Isolation Level 지난 글에 이어서 이번 글에서는 Transaction Isolation Level(트랜잭션 격리 수준)에 대해 알아보겠습니다. 정의 트랜잭션 격리 수준은 동시에 여러 트랜잭션이 처리될 때 특정 트

velog.io

 

[db] 트랜잭션 격리수준(isolation level)

 

 

[db] 트랜잭션 격리 수준(isolation level)

트랜잭션 격리수준(isolation level)이란 동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것이다. 즉, 간단하게 말해 특정 트랜잭션이 다른 트랜잭션에

joont92.github.io

 

Mysql InnoDB Isolation level 

 

+ chatGPT 

반응형

댓글