isolation level 복습

ClassBinu·2024년 5월 27일

F-lab

목록 보기
39/65

멘토링 시간에 설명 제대로 못함.
다시 한번 정리하기!!

요약하면 한 트랜잭션이 다른 트랜잭션이 끼어들 때 어떤 작업으로 끼어들 거를 허용할까? 수준

격리 수준이 왜 필요하지?

다중 사용자 환경에서 트랜잭션이 서로 간섭 없이 안전하게 DB에 접근, 수정할 수 있는 정도
동시성과 관련있음.
높은 격리 수준은 일반적으로 더 낮은 동시성을 의미.

동시성?
프로세스, 스레드가 시스템 자원을 공유하면서 동시에 실행되는 성질

읽기 이상 현상 종류

더티 리드

아직 커밋되지 않은 데이터를 일는 현상

반복 불가능 읽기(+수정)

한 트랜잭션이 같은 데이터를 두 번 이상 일을 때, 첫 번째 읽기와 두 번째 읽기 사이에 다른 트랜잭션이 그 데이터를 수정하여 두 번의 읽기 결과가 서로 다를 때 발생
즉, 한 트랜잭션에서 일관성 있는 정보를 제공하지 못하는(반복적으로 정상적인 읽기가 불가능한 상태) 경우

팬덤 리드(+삽입, 삭제)

한 트랜잭션이 조회를 수행할 때, 그 사이 다른 트랜잭션이 레코드를 삽입하거나 삭제해서 발생.
처음 쿼리에는 존재하지 않았던 추가 레코드(팬텀)이 두 번쨰 쿼리에서는 나타나는 경우.
또는 첫 번째 쿼리에서는 존재했는데, 두 번째 쿼리에서는 존재하지 않는 경우.

격리 수준 종류

Read Uncommitted (읽기 미확정)

  • 가장 낮음
  • 아직 커밋하지 않았지만, 그걸 다른 트랜잭션이 일을 수 있음(더티 리드)
  • 더티 리드는 다른 트랜잭션이 롤백되면, 롤백된 데이터를 참조할 위험이 있음.

만약 첫 번째 트랜잭션이 커밋되지 않았는데, 이 수준에서는 두 번째 트랜잭션이 아직 커밋되지 않은 데이터를 읽을 수 있다. 만약 그대로 커밋이 되면 상관없는데, 이게 롤백이 되어 버리면 더러운 데이터를 읽는 것이다.

Read Committed (읽기 확정)

  • 일반적임
  • 커밋된 데이터만 읽을 수 있음.
  • 더티 리드는 방지함.

반복 가능 읽기

  • 트랜잭션이 시작된 후 읽은 데이터는 끝날 때까지 동일하게 유지, 즉 다른 트랜잭션이 수정하지 못함.
  • 반복 불가능 읽기는 방지. 팬텀 리드는 존재.

직렬화 가능

  • 가능 높은 격리 수준
  • 트랜잭션이 마치 순차적으로, 즉 직렬적으로 실행된 것처럼 동작하도록 보장하는 격리 수준
  • 모든 종류의 읽기 이상 현상을 방지
  • 동시성 가장 높음. 성능 오버헤드 가장 큼.

만약 격리 수준을 벗어난 트랜잭션이 발생하면 블로킹이 발생함.
트랜잭션이 특정 데이터의 접근 권한의 '락'을 획득하는 것.

0개의 댓글