DB 격리 수준, Isolation level #38
choi-ys
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
개요
격리 수준은
DB가 트랜잭션 간 동시 작업
을격리하는 수준
을 의미한다.DB가 트랜잭션 간 수준(Level)을 나누어 격리(Isolation)하는 이유는 무엇일까?
동시에 여러 트랜잭션
이 동일 컬럼, 로우, 테이블에 읽기/쓰기 작업을 진행한다면 어떤 문제가 발생할까?여러 트랜잭션의 동시 작업
으로 인해 발생하는예상하지 못한 데이터 이상 현상
을동시성 문제
라고 하는데, 이러한 데이터 이상 현상으로데이터 정합성/무결성이 위배
되는 문제가 발생할 수 있다.DB는 동시성 문제를 해결
하기 위해트랜잭션 간 동시 작업을 제어
하기 위한4단계 트랜잭션 격리 수준
을 제공하는데, 본 글에서는 트랜잭션격리 수준에 따라 발생하는 문제
와, 이를해결하는 과정
을 알아보고자 한다.목표
제일 낮은 단계의 격리 수준
에서 발생할 수 있는 문제부터,격리 수준을 한 단계씩 높혀
감에 따라 기존 문제가 해결 되는 과정을 이해격리 수준 살펴보기
Read Uncommitted
Read Committed
Repeatable Read
Serializable
각 격리 수준에서 발생할 수 있는 문제 살펴보기
Dirty read
Non-repeatable read
Lost update
Phantom read
TODO
Dirty read
발생 여부 검증 TC 작성Non-Repeatable read
발생 여부 검증 TC 작성Lost update
발생 여부 검증 TC 작성Phantom read
발생 여부 검증 TC 작성테스트 시나리오
Isolation.READ_UNCOMMITTED: Dirty Read Problem
Isolation.READ_COMMITTED : Non-Repeatable Read Problem
Isolation.READ_COMMITTED : Lost Update
Isolation.REPEATABLE_READ : Phantom Read Problem
Isolation.SERIALIZABLE
트레이드 오프
격리 수준이 높을 수록 = 동시에 다른 트랜잭션의 작업을 제한할 수록 = 데이터에 대한 일관성이 높아짐
격리 수준이 높을 수록 = 다른 트랜잭션의 대기 시간이 길어짐 = 성능상 저하를 우려할 수 있음
마치며
만약 우리가 동시성 문제를 해결 해야하는 상황이 온다면?
동시성 문제를 해결하기 위해 격리 수준을 높힌다면?
동시성 문제를 해결하기 위해 고려 가능한 다른 방법은?
제한 범위 내 순간적인 트래픽(ex: 총 개수가 정해진 쿠폰 발급)
제한 시간 내 지속적으로 폭발적 트래픽(ex: 기간 내 투표)
진짜 마치며
본 글은 DB의 격리 수준에 따라 발생할 수 있는 데이터 부정합 현상에 대해 단편적으로 알아본 내용으로, 실제 DB가 각 격리 수준을 어떤 방법으로 제어하고 있는지는 Lock의 종류, DB 아키텍쳐 등에 대한 내용을 추가적으로 학습 하시기를 권장 드리면서
기회가 된다면, 데이터 이상 현상이 발생하는 이유에 대해 MVCC와 Lock 관점에서 추가적으로 알아보고자 한다.
Beta Was this translation helpful? Give feedback.
All reactions