-
Isolation level이란?공부 이야기/데이터베이스 2024. 2. 28. 19:32
트랜잭션이 시작하고 끝나는 시점 / Commit 여부 / 두 개의 변수인 경우
이 세 가지를 염두해놓고 생각해봐야 한다.
먼저 데이터 일관성이 깨지는 과정을 단계별로 알아보면 다음과 같다.1) read uncommit
- commit 되지 않은 데이터를 읽기 때문에 동시에 두 개 이상의 트랜잭션에서 쓰기 연산 수행시 데이터 일관성이 깨질 수 있음
2) read commit- commit 데이터를 읽고 쓰기 연산을 수행하기 때문에 데이터 일관성이 '어느 정도' 보장
- A 트랜잭션이 종료되기 전에
B 트랜잭션이 쓰기 연산을 하고 commit 까지 해버리면
A 트랜잭션이 종료될 때 시작시 조회했던 값이랑 불일치하는 경우가 발생하고 이를 non-repeatable read 라고 함.
반복 조회한 값이 서로 다르다는 뜻
3) repeatable read
- 위 단계와 마찬가지로 트랜잭션이 시작된 시점을 기준으로 latest commit 데이터를 읽지만
종료 시점의 데이터의 일관성을 지켜준다는 점에서 차이가 있음
- mysql innodb는 해당 단계가 기본 값인데 쓰기 연산 수행 시 undo 로그에 있는 값(=commit 되기 전의 값)을 조회 종료 시 반환해주기 때문에 시작과 종료의 일관성을 지킬 수 있음
- oracle에서는 select for update로 lock 제어를 해야 다른 트랜잭션을 block 함으로써 시작과 종료의 일관성을 지킬 수 있음
'공부 이야기 > 데이터베이스' 카테고리의 다른 글
mysql > 별 다른 짓을 안해도 자동으로 last_modified 처리하는 방법 (0) 2024.03.05 MySQL 테이블 DCL 관련 기능 (1) 2024.02.29 Cannot add or update a child row: a foreign key constraint fails (0) 2024.02.26 브릿지 네트워크에 연동해서 MySQL 서버 실행하는 방법 (0) 2024.02.20 sqlalchemy.exc.InvalidRequestError: Could not refresh instance '<ToDo at 0x1a7a483cc50>' (0) 2024.02.08