Isolation Level

귀찮Lee·2023년 2월 14일
0

DataBase / MySQL

목록 보기
5/16
post-thumbnail
post-custom-banner

원티드 프리온보딩 2월 "MySQL 잘 사용하기" 학습내용 2일차 - 3

◎ Isolation Level

  • Consistent Read

    • read(=SELECT) operation을 수행할 때 현재 DB의 값이 아닌 특정 시점의 DB snapshot을 읽어오는 것
      • commit 된 변화만이 적용된 상태의 snapshot
    • InnoDB 엔진은 실행했던 쿼리의 log를 통해 consistent read를 지원
      • InnoDB 엔진은 각 쿼리를 실행할 때마다 실행한 쿼리의 log를 차곡차곡 저장
      • consistent read를 할 때 이 log를 통해 특정 시점의 DB snapshot을 복구하여 가져온다.
      • 비록 복구하는 비용이 발생하긴 하지만, lock을 활용하는 방식보다 높은 동시성을 얻을 수 있다.
  • Isolation Level

    • 여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지 결정함

◎ Isolation Level 종류

  • Read Uncommitted

    • 다른 트랜잭션의 변경 내용이 commit이나 rollback 여부에 상관 없이 보임
  • Read Committed

    • 트랜젝션이 완료된 데이터만 다른 트랜잭션에서 조회 가능
    • 커밋되기 전에는 Undo Log에 있는 곳의 데이터를 읽어옴
  • Repetable Read (InnoDB 기본 값)

    • 언두 영역에 백업된 이전 데이터를 이용해서 동일 트랜잭션에서는 같은 내용을 보여줄 수 있도록 함
    • 다른 트랜젝션에서 커밋이 끝나 디스크 영역에 정보 값이 이미 바뀌었어도, 바뀌기 전의 값의 데이터를 전달함
  • Serializable

    • 하나의 트랜잭션에서 락을 가지고 있는 레코드에 다른 트랜잭션이 접근할 수 없음
    • LOCK을 획득해야만 정보를 조회,변경,추가 할 수 있다.
    • 비효율적이므로 실제로 사용하는 경우는 드물다.
    • InnoDB에서는 필요없음

◎ Isolation Level에 따라 발생할 수 있는 문제들

  • Dirty Read

    • 커밋이 되지 않은 데이터를 다른 트랜잭션이 읽을 수 있다.
    • 트랜잭션이 롤백되었을 경우 최종 결괏값이 비 일관적으로 적용될 가능성이 있다.

      text

  • Non Repeatable Read

    • 반복해서 같은 데이터를 읽을 수 없게 된다.
    • 한 트랜잭션 내 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션이 값을 수정/삭제하므로 두 쿼리의 결과가 상이하게 나타나는 비 일관성의 문제가 발생

      text

  • Phantom Read
    • 반복 조회 시 결과 집합이 달라지는 문제
    • 한 트랜잭션 안에서 일정 범위의 레코드를 두 번 읽을 때, 처음 결과에 없던 레코드가 두 번째에서는 나타나는 문제

      text

◎ 참고 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글