개발로 자기계발
728x90

설명

같은 데이터를 쓰고 읽기 위해 다중 트랜잭션의 동시성이 발생할 수 있는 가능성이 있는데 이것이 고립의 시작이며,

격리 레벨에 따른 읽기 현상이 발생한다.

 

내용

트랜잭션 격리 레벨(Transaction Isolation Level)

 

[MySQL] 트랜잭션 격리 수준(간단한 정리)

READ UNCOMMITTED 정의 다른 트랜잭션에서 아직 커밋되지 않은 데이터도 조회할 수 있다. 부정합 '더티 리드(Dirty Reads)'가 발생할 수 있다. 아직 확정되지 않은 데이터를 읽어서 그 트랜잭션이 롤백되

zambbon.tistory.com

 

읽기 현상(Read Phenomena)

구분 설명
Dirty Reads 아직 커밋되지 않은(즉, 최종 확정되지 않은) 데이터를 읽는 현상
Non-Repeatable Reads 한 트랜잭션이 같은 데이터를 두 번 이상 읽을 때, 두 번의 읽기 결과가 서로 다르게 나타나는 현상
Phantom Reads 한 트랜잭션이 같은 데이터를 두 번 이상 읽을 때, 새로운 데이터 행이 나타나거나 사라지는 현상
Lost Updates 두 트랜잭션이 거의 동시에 같은 데이터를 수정할 때, 한 트랜잭션의 변경 사항이 다른 트랜잭션에 의해 덮어쓰여지는 현상

Dirty Reads
친구가 노트에 글을 쓰고 있다. 나는 그 글을 읽었는데, 친구가 "잠깐, 이건 실수였어" 하고 지워버렸다. 나는 실수를 읽었던 거다.

Non-Repeatable Reads
이번엔 친구가 노트에 무언가를 쓴다. 나는 읽고 나서 잠시 후에 다시 그 문장을 읽으려고 하는데, 친구가 이미 그 문장을 고쳐 쓰고 있어서 너는 처음과 다른 문장을 읽게 되었다.

Phantom Reads
이건 노트에 친구가 쓴 문장들의 목록을 두 번 읽는 거다. 첫 번째 읽을 때는 10개의 문장이 있었는데, 두 번째 읽을 때는 다른 친구가 문장을 하나 추가하거나 지워서 문장 수가 달라져 있다.

Lost Updates
나와 친구가 같은 노트의 같은 문장을 동시에 고치려고 한다. 나는 문장을 하나 고치고 친구에게 보여줬다. 근데 친구가 그걸 보지 않고 원래 문장을 고쳐버렸다. 내가 고친 건 사라져 버렸다.

 

정리

격리 레벨은 다른 트랜잭션에서 데이터를 동시에 어떻게 보고 수정할 수 있는지를 결정하는 데이터베이스 관리 시스템의 속성이다.

 

격리 레벨을 조정함으로써, 성능과 동시성 대비 데이터 정확성과 일관성을 어떻게 균형을 맞출지 결정 하는데, 격리 레벨이 낮을수록 동시성은 높아지지만, 데이터의 정확성과 일관성을 유지하기 어려워진다.

 

반대로, 격리 레벨이 높을수록 데이터의 정확성과 일관성은 보장되지만  동시성이 떨어진다.

728x90
SMALL
profile

개발로 자기계발

@김잠봉

틀린부분이나 조언이 있다면 언제든 환영입니다:-)