콘텐츠로 이동

Isolation Level (격리 수준)

종류

  • LEVEL 0 : READ UNCOMMITTED
  • 각 트랜젝션에서 변경된 내용을 COMMIT이나 ROLLBACK과 상관없이 다른 트랜잭션에서 볼 수 있음 (DIRTY READ)
  • 정합성에 문제가 많으므로 사용하지 않음


  • LEVEL 1 : READ COMMITTED
  • 대부분의 RDBMS에서 사용하는 방식
  • DIRTY READ가 발생하지 않음 (실제 테이블 데이터를 가져오는게 아닌 UNDO 영역에 백업된 데이터를 가져오기 때문)
  • 트랜잭션 내에서의 똑같은 SELECT 쿼리로 조회했음에도 불구하고 다른 값이 나올 가능성이 있음 (NON-REPEATABLE READ)


  • LEVEL 2 : REPEATABLE READ
  • MySQL InnoDB의 기본 격리 수준 레벨은 이 방식으로 설정되어 있음
  • 트랜잭션마다 번호를 할당하여 해당 번호보다 낮은 트랜잭션에서만 변경한 데이터를 읽게 함 (UNDO 영역에 데이터를 백업하고 실제 레코드 값은 변경됨)
  • UNDO 영역에 백업된 데이터가 많아지면 성능 저하가 발생
  • 다른 트랜잭션에서 실행된 변경 작업에 의해 해당 레코드가 보이거나 안 보일 가능성이 있음 (PHANTOM READ)
  • PHANTOM READ를 방지하려면 쓰기 잠금이 필요


  • LEVEL 3 : SERIALIZABLE
  • 가장 단순하고 엄격한 격리 수준
  • PHANTOM READ가 발생하지 않음
  • 처리 성능이 좋지 않기 때문에 특수한 상황 외에는 사용하지 않는 방식


LEVEL DIRTY READ NON-REPEATABLE READ PHANTOM READ
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE