SQL 표준에서 정의하는 세 가지 현상
dirty read, non-repeatable read, phantom read
Dirty read
- commit 되지 않은 변화를 읽음
Non-repeatable read (Fuzzy read)
- 같은 데이터의 값이 달라짐
Phantom read
- 없던 데이터가 생김
dirty read, non-repeatable read, phantom read 이런 현상들이 모두 발생하지 않게 만들 수 있지만, 그렇게 되면 제약사항이 많아져서 동시 처리 가능한 트랜잭션 수가 줄어들어 결국 DB의 전체 처리량(throughput)이 하락하게 됨.
이 문제를 해결하기 위해 일부 이상한 현상은 허용하는 몇 가지 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
MySQL은 SQL 표준에서 정의하는 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 |
댓글