본문 바로가기
DB

17. transaction isolation level

by 유니개발 2023. 5. 4.

SQL 표준에서 정의하는 세 가지 현상

dirty read, non-repeatable read, phantom read

 

Dirty read

- commit 되지 않은 변화를 읽음

dirty read 예시

Non-repeatable read (Fuzzy read)

- 같은 데이터의 값이 달라짐

non-repeatable read 예시

Phantom read

- 없던 데이터가 생김

phantom read 예시

 

dirty read, non-repeatable read, phantom read 이런 현상들이 모두 발생하지 않게 만들 수 있지만, 그렇게 되면 제약사항이 많아져서 동시 처리 가능한 트랜잭션 수가 줄어들어 결국 DB의 전체 처리량(throughput)이 하락하게 됨.

이 문제를 해결하기 위해 일부 이상한 현상은 허용하는 몇 가지 level을 만들어서 사용자가 필요에 따라 적절하게 선택할 수 있도록 함.

 

isolation level에 따른 허용 범위

Serializable 레벨은 위 세가지 현상 뿐만 아니라 아예 이상한 현상 자체가 발생하지 않는 level을 의미함.

 

 

이외에도 예외적으로

Dirty write

- commit 안된 데이터를 write 함

 

Lost update

- 업데이트를 덮어 씀

 

Dirty read 확장판

- abort를 하지 않아도 dirty read가 발생할 수 있음

 

Read skew

- inconsistent한 데이터 읽기

 

Write skew

- inconsistent한 데이터 쓰기

 

Phantom read 확장판

- 꼭 같은 조건에 대해서 두 번 read하지 않더라도 서로 연관된 데이터를 read 했을 때 데이터 불일치가 발생한다면,

이것도 phantom read라고 볼 수 있음

 

Snapshot isolation (type of MVCC(multi version concurrency control))

- tx 시작 전에 commit된 데이터만 보임

- First-committer win

snapshot isolation 예시

 

MySQL은 SQL 표준에서 정의하는 isolation level과 동일하게 정의하고 있음.

MySQL에서 정의하는 isolation level

 

 

 

 

출처 : https://www.youtube.com/watch?v=bLLarZTrebU&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=17

'DB' 카테고리의 다른 글

19. MVCC 개념  (0) 2023.05.08
18. concurrency control - Lock  (0) 2023.05.04
16. concurrency control - 2  (0) 2023.05.03
15. concurrency control - 1  (0) 2023.05.03
14. MySQL transaction  (0) 2023.05.03

댓글