책너두 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는 기억해두자.