DB isolation level (격리수준)

2023. 11. 25. 23:07스터디/real MySql 스터디

728x90

격리수준이란(isolation level) 트랜젝션 간 고립 수준을 말한다.

즉, 다른 트랜젝션이 변경한 데이터에 대한 접근 강도를 의미한다.

* dirty read : 다른 트렌젝션에서  아직 commit 되지 않은 데이터를 읽는 것

* non-repeatable read : 다른 트랙젝션에서 데이터 수정/삭제 시  커밋한 데이터를 읽을 수 있는 것. 한 트랜젝션에서 같은 쿼리로 2번 이상 조회했을 때 그 결과가 상이한 상황

* phantom read : 데이터 삽입 시 발생, 한 트랜젝션에서 같은 쿼리를 2번 이상 조회했을 때 없던 결과를 조회하는 상황, 다른 트랜젝션이 commit한 데이터가 있더라도, 자신의 트랜젝션에서 읽었던 내용만 사용

 

 

격리수준을 좀 더 자세히 알아보자

 

LEVEL 0 - Read Uncommited

 

커밋이나 롤백 상관 없이 다른 트랜젝션에서 조회 가능한 것.

정합성 문제가 많음. 그래서 격리 수준으로 인정 안해용

Select를 실행하는 동한 해당 data에 shared lock이 걸리지 않아용

그래서 dirty read가 발생한답니당

 

LEVEL 1 - Read Commited

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

대부분 RDB들이 기본적으로 사용하는 격리 수준이다.

select문 실행 시 shared Lock이 걸린다. 

조회 시에는 실제 테이블 값이 아니라 Undo 영역에 백업된 레코드 값을 가져온다.

하지만, 하나의 트랜젝션에서 select를 다수 실행을 해도 항상 같은 결과를 가져와야하는데, 그러지는 못해용

즉, non-repeatable read와 phantom read가 발생한답니당

 

 

LEVEL 2  - Repeatable Read

트랜젝션 시작하기 전에 커밋한 내용만 조회 가능하다.

트랜젝션이 완료될 때까지 Select문이 사용하는 모든 데이터에 shared lack이 걸린다.

그래서 트랜젝션 범위 내에서 데이터 내용이 항상 동일함을 보장한다.

하지만, 일관성 보장을 위해, 트랜젝션 실행시간이 길어질수록 멀티 버전을 관리해야한다.

또한, phantom read가 발생할 수 있다.

 

Level 3 - Serializable

가장 엄격한 격리 수준. 

트랜젝션이 동시에 일어나지 않고 순차적으로 실행된다.

당연히 동시 처리를 못하니 겁나 느리다

 

 

참조 :

real mysql8.0

https://akasai.space/db/about_isolation/

 

Isolation Level이란? | devlog.akasai

격리 수준(isolation level)이란? 격리수준(isolation level…

akasai.space

 

728x90

'스터디 > real MySql 스터디' 카테고리의 다른 글

Mysql 아키텍처  (1) 2023.11.26
Index 인덱스  (1) 2023.11.26
DB Lock  (2) 2023.11.25