트랜잭션 격리 수준
이란, 여러 트랜잭션이 동시에 실행될 때 특정 트랜잭션이 다른 트랜잭션의 변경사항을 볼 수 있게 허용할지 말지를 결정하는 것이다.
격리 레벨은 크게 READ UNCOMMITED, READ COMMITED, REPEATABLE READ, SERIALIZABLE로 나뉘며, 뒤로 갈수록 격리 정도가 높아지며 동시 처리 성능은 떨어진다.
아래와 같이 각 격리 레벨에서 부적합 문제가 발생할 수 도 있고, 발생하지 않을 수도 있다.
DIRTY READ | NON REPEATABLE READ | PHANTOM READ | |
---|---|---|---|
READ UNCOMMITED | O | O | O |
READ COMMITED | X | O | O |
REPEATABLE READ | X | X | O (InnoDB일 경우 X) |
SERIALIZABLE | X | X | X |
각, 부적합 문제들의 의미는 아래와 같다.
RDBMS 중, MySQL은 레코드 단위까지 트랜잭션을 지원해준다.
MVCC
는, 동시 접근을 허용하는 데이터베이스에서 동시성을 제어하기 위해 사용하는 방법 중 하나이다.
이를 위해 **언두 로드(Undo log)**를 사용하는데, 특정 시점의 Snapshot(언두 로그) 정보를 바탕으로 잠금을 사용하지 않는 일관된 읽기(Consistent read)를 보장해준다.