※ 원티드 프리온보딩 2월 "MySQL 잘 사용하기" 학습내용 2일차 - 3
◎ Isolation Level
-
Consistent Read
- read(=SELECT) operation을 수행할 때 현재 DB의 값이 아닌 특정 시점의 DB snapshot을 읽어오는 것
- commit 된 변화만이 적용된 상태의 snapshot
- InnoDB 엔진은 실행했던 쿼리의 log를 통해 consistent read를 지원
- InnoDB 엔진은 각 쿼리를 실행할 때마다 실행한 쿼리의 log를 차곡차곡 저장
- consistent read를 할 때 이 log를 통해 특정 시점의 DB snapshot을 복구하여 가져온다.
- 비록 복구하는 비용이 발생하긴 하지만, lock을 활용하는 방식보다 높은 동시성을 얻을 수 있다.
-
Isolation Level
- 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지 결정함
◎ Isolation Level 종류
◎ Isolation Level에 따라 발생할 수 있는 문제들
-
Dirty Read
- 커밋이 되지 않은 데이터를 다른 트랜잭션이 읽을 수 있다.
- 트랜잭션이 롤백되었을 경우 최종 결괏값이 비 일관적으로 적용될 가능성이 있다.
-
Non Repeatable Read
- 반복해서 같은 데이터를 읽을 수 없게 된다.
- 한 트랜잭션 내 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션이 값을 수정/삭제하므로 두 쿼리의 결과가 상이하게 나타나는 비 일관성의 문제가 발생
- Phantom Read
- 반복 조회 시 결과 집합이 달라지는 문제
- 한 트랜잭션 안에서 일정 범위의 레코드를 두 번 읽을 때, 처음 결과에 없던 레코드가 두 번째에서는 나타나는 문제
◎ 참고 자료
- Lock 과 Isolation Level 관계