책너두 6기 17일차
백은빈, 이성욱의 Real MySQL8.0 1권 p.176 ~ p.184
내용정리
05 트랜잭션과 잠금
5.4 MySQL의 격리 수준
- 격리 수준(isolation level)이란 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지를 결정하는 것이다.
5.4.1 READ UNCOMMITTED
- 각 트랜잭션에서의 변경 내용이
COMMIT이나ROLLBACK여부에 상관없이 다른 트랜잭션에서 보인다. 이를 더티 리드(Dirty read)라 한다.
5.4.2 READ COMMITTED
오라클 DBMS에서 기본으로 사용되는 격리 수준.
가장 흔하게 사용된다.
COMMIT이 완료된 데이터만 다른 트랜잭션에서 조회할 수 있다.
5.4.3 REPEATABLE READ
- MySQL의 InnoDB 스토리지 엔진에서 기본으로 사용되는 격리 수준
- 바이너리 로그를 가진 MySQL 서버에서는 최소 이 수준 이상을 사용해야 한다.
- 트랜잭션이
ROLLBACK될 가능성에 대비해 변경되기 전 레코드를 언두(Undo) 공간에 백업해두고 실제 레코드 값을 변경한다.
5.4.4 SERIALIZABLE
- 가장 단순하면서 가장 엄격한 격리 수준
- 동시 처리 성능이 가장 떨어진다.
- 읽기 작업도 공유 잠금(읽기 잠금)을 획득해야 한다.
- 한 트랜잭션에서 읽고 쓰는 레코드는 다른 트랜잭션에서 절대 접근할 수 없다.
읽고나서
READ COMMITTED는 기억해두자.