[DB] Isolation Level

양정훈·2022년 6월 21일
  • 트랜잭션의 성질 중, Isolation(격리성)을 보장하려면 트랜잭션이 순서대로 처리되어야 함
  • 순서대로 처리하면 동시성 처리 성능이 떨어지므로 격리성 수준을 두어 관리

Read Uncommited

  • 다른 트랜잭션이 commit하지 않은 데이터에 접근 가능
  • Dirty Read, Non-repeatable Read, Phantom Read 발생

Dirty Read

  • B 트랜잭션이 데이터를 변경후 커밋하지 않고 종료했다면, A 트랜잭션은 잘못된 데이터를 조회하게 됨

Read Commited

  • Oracle, SQL Server 기본 격리성
  • commit된 데이터만 조회 가능
  • 해당 트랜잭션이 완료될 때까지, 조회한 모든 데이터에 shared lock이 걸려 데이터 변경을 방지함
  • Non-repeatable Read, Phantom Read 발생

Non-repeatable Read

  • 한 트랜잭션 내에서, 처음 조회했던 데이터를 다시 조회했는데 그 사이 다른 트랜잭션이 해당 데이터를 변경했다면 다른 데이터가 조회됨
  • 정합성이 깨짐

Repeatable Read

  • MySQL 기본 격리성
  • 한번 조회한 데이터는, 해당 트랜잭션 내에서 다시 조회해도 같은 데이터가 조회됨
  • 해당 트랜잭션이 완료될 때까지, 조회한 모든 데이터에 shared lock이 걸려 데이터 변경을 방지함
  • 트랜잭션 도중 다른 트랜잭션의 INSERT를 허용함
  • Phantom Read 발생

Phantom Read

  • 한 트랜잭션 내에서, 처음 조회할때 조회되지 않았던 데이터가 두번째 조회에서 조회됨 (INSERT를 허용하므로)
  • A 트랜잭션에서 특정 데이터를 조회했는데 B 트랜잭션에서 해당 데이터를 수정, 커밋했다면 A가 다시 조회했을때 최종 수정되기 이전의 데이터가 조회됨

Serializable

  • 가장 엄격한 수준의 격리성
  • 동시성 처리에 약함
  • REPEATABLE READ와 마찬가지로 shared lock이 걸림

0개의 댓글