ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySql Isolation Level(격리수준)
    공부하기/데이터베이스 2023. 2. 19. 17:27

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

    • READ UNCOMMITTED
      • DIRTY READ : 어떤 트랜잭션에에서 처리한 작업이 완료되지 않았는데도 다른 트랜잭션에서 볼 수 있는 현상
      • 트랜잭션이 아직 커밋되지 않은 다른 트랜잭션의 변경 사항을 읽을 수 있도록 한다.
      • 높은 처리량을 보장하지만 데이터 일관성이 보장되지 않는다.
      • 거의 사용되지 않는다.
    • READ COMMITTED
      • 트랜잭션이 다른 트랜잭션이 커밋한 변경 사항을 읽을 수 있도록 하지만, 아직 커밋되지 않은 변경 사항은 읽을 수 없다.
      • NON-REPEATABLE READ라는 부정합의 문제가 있음 ( 아래는 예시 )
        • a 트랜잭션에서 사원의 이름을 a -> b 로 변경
        • b 트랜잭션에서 사원의 이름을 여러번 조회하는 경우 첫번째 요청에는 a로 두번째 요청부터 b 로 조회되는 문제가 발생
        • 하나의 작업셋에서 요청한 동일한 쿼리의 결과가 달라지는 문제가 발생함
    • REPEATABLE READ
      • mysql의 InnoDB 스토리지 엔진에서 기본으로 사용되는 결리 수준
      • 트랜잭션 내에서 읽은 모든 데이터에 대해 일관된 값을 보장.
      • 트랜잭션 내에서 일관성을 유지해야 하는 경우에 사용
      • NON-REPEATABLE READ 문제가 발생하지 않음
      • 트랜잭션 작업의 초기 데이터를 언두 로그에 저장하고 에러 발생 시 언두 로그에 저장된 값으로 복원 -> MVCC
      • 한 트랜잭션 내에서 여러번 쿼리를 실행하면 항상 같은 결과를 갖는다.
      • 트랜잭션이 완료될 때까지 일관된 데이터를 보장
      • *Phantom Read를 방지한다.
    • SERIALIZABLE
      • 가장 높은 격리 수준으로, 모든 트랜잭션이 순차적으로 실행되도록 보장
      • 데이터 일관성을 보장하지만 처리량이 감소할 수 있다.

    각 격리 수준에는 장단점이 있으므로, 사용하려는 애플리케이션의 요구 사항과 데이터 일관성 요구 사항을 고려하여 격리 수준을 선택해야 합니다. 기본적으로 MySQL은 REPEATABLE READ 격리 수준을 사용합니다.

     

    *Phantom Read

    MySQL의 Phantom Read란, 같은 쿼리를 실행했을 때, 한 번에 반환되는 레코드 수가 다른 경우를 말한다.

    Phantom Read는 다른 트랜잭션이 실행 중인 상황에서 트랜잭션 A가 특정 범위의 데이터를 조회하고, 그 범위에 해당하는 데이터를 수정, 삭제, 삽입한 후, 동일한 쿼리를 다시 실행할 때 발생합니다. 이 경우, 이전과 다른 결과를 반환할 수 있으며, 이것이 Phantom Read입니다.

     

     

    '공부하기 > 데이터베이스' 카테고리의 다른 글

    [용어] MySql 드라이빙 테이블, 드리븐 테이블  (0) 2023.02.28
    mysql 쿼리 실행 절차  (0) 2023.02.19
    MySql Database Lock  (0) 2023.02.19
    다양한 데이터베이스 특징  (0) 2023.02.18
    MySQL UNION 요약  (0) 2023.02.10
Designed by Tistory.