간단이론정리

트랜잭션 격리수준(Isolation Level)

눕고싶은사람 2024. 6. 11. 21:03

이번에는 트랜잭션 격리수준을 간단하게 정리해보고자 한다.

 

1. 정의

동시에 여러 트랜잭션이 처리 될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할 지 여부를 결정하는 것을 말한다.

 

2. 단계

MySQL 기준으로 가장 높은 격리 수준 순서대로 보면 아래와 같다.

MySQL의 기본 격리 수준은 'Repeatable Read'이다.

  • Serializable
  • Repeatable Read
  • Committed Read
  • Uncommitted Read

 

※ 언두 영역

- UPDATE 문이나 DELETE 문으로 데이터 변경 시 이전 데이터를 보관 하는 영역

  • 트랜잭션의 롤백 대비
  • 트랜잭션의 격리 수준 유지하며 동시성 제공

 

2.1 Serializable

가장 고수준의 격리 수준이다.

여러 트랜잭션이 동일한 레코드에 접근을 할 수 없고 무조건 트랜잭션을 순차 진행 시키기 때문에 데이터 부정합은 발생하지 않으나 동시 처리가 불가능하여 속도를 보장 할 수 없다.

SELECT 작업에서도 대상 레코드에 Next Key Lock을 걸어버려서 다른 트랜잭션에서 절대 접근 할 수 없다.

정말 필요한 것이 아니라면 사용 하지 않는 것이 맞다.

 

2.2 Repeatable Read

커밋된 데이터만 읽을 수 있으며 자신 보다 낮은 트랜잭션 번호를 갖는 트랜잭션에서 커밋한 데이터만 읽을 수 있는 격리 수준이다.

변경 전/후의 데이터가 언두 영역에 모두 존재하기 때문에 데이터를 보장하는 것을 MVCC(Multi-Version Concurrency Control, 다중 버전 동시성 제어) 라고 한다.

이 MVCC로 인하여 한 트랜잭션 내에서는 동일한 결과를 보장하지만, 새로운 레코드가 추가되는 경우에 데이터 부정합이 발생 할 수도 있다.

 

새로운 레코드 추가 시 조회 결과가 달라 질 수 있기 때문에 다른 트랜잭션에서 수행한 작업에 의해 레코드가 보였다 안보였다 하는 현상인 Phantom Read(유령 읽기)가 발생 할 수 있다.

InnoDB 엔진인 MySQL에는 갭 락이 있어 유령 읽기가 발생하지 않는다.

 

2.3 Committed Read

커밋된 데이터만 조회 가능하다. MySQL을 제외하면 대부분 이를 기본 격리 수준으로 사용한다고 한다.

유령 읽기 및 Non-Repeatable Read(반복 읽기 불가능) 문제가 발생 할 수 있다.

 

다른 트랜잭션의 커밋 여부에 따라 조회 결과가 달라지기 때문에 발생하는 데이터 부정합 문제가 Non-Repeatable Read이다. 일반적인 경우에는 문제가 없을 수 있겠지만 돈과 관련된 부분이라면 고민을 해봐야한다.

하나의 트랜잭션에서 동일 데이터를 여러번 읽고 변경 하는데 정산과 관련된 부분이라면 문제가 반드시 발생 하기 때문에 격리 수준을 잘 파악하고 결과를 예측 할 수 있어야 한다.

 

2.4 Uncommitted Read

커밋되지 않은 데이터도 조회가 가능하다. 다른 트랜잭션의 작업이 커밋 or 롤백 되지 않아도 보이는 것이다.

따라서 정합성에 굉장히 부적합한 격리 수준이며 사용해서도 안될 것이다.

 

 

 

출처 및 참고

https://mangkyu.tistory.com/299

 

[MySQL] 트랜잭션의 격리 수준(Isolation Level)에 대해 쉽고 완벽하게 이해하기

이번에는 트랜잭션 격리 수준(Isolation Level)에 대해 알아보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성하였으며, 모든 내용은 InnoDB를 기준으로 설명합니다. 해

mangkyu.tistory.com

https://tlatmsrud.tistory.com/118

 

[DB] 트랜잭션 격리수준 (Isolation Level) 에 쉽게 이해하기

1. 개요 올해 6월부터 코로나 위기 단계가 하향 조정됨에 따라 7일 격리였던 격리 수준이 5일로 완화되었다. :) 어떤 단계에 따라 격리 수준 변경되고 있는데 우리가 사용하는 DB, 트랜잭션에도 격

tlatmsrud.tistory.com