Transaction

David8·2023년 6월 14일
0

DB

목록 보기
5/5

기본 내용

  1. 상호작용
  2. dirty read
    1. 아직 commit 되지 않은 수정중인 데이터를 다른 트랜잭션에서 읽을 수 있도로 허용
  3. non-repeatable read
    1. 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션 값을 수정 또는 삭제하면서 두쿼리의 결과가 상이하게 나타나는 일관성이 깨진 현상
  4. phantom read
    1. 한 트랜잭션 안에서 일정 범위의 레코들 두 번 이상 읽었을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상
    2. 트랜잭션 도중 새로운 레코드 삽입을 허용하기 때문에 나타남
  5. isolation 수준
    1. READ UNCOMMITTED
    2. READ COMMITTED
    3. REPEATABLE READ
    4. SERIALIZABLE

참조 링크
https://www.youtube.com/watch?v=sEBbYTDMBvA

READ UNCOMMITTED

  1. 각 트랜잭션에서 변경내용이 commit 이나 rollback 여부에 상관없이 다른 트랜잭션 값 읽을 수 있음
  2. 정합성에 문제가 많은 격리 수준이기 때문에 사용하지 않는 것 권장
  3. 문제점
    1. dirty read 현상 발생
      1. 트랜잭션 작업이 완료 되지 않았는데 다른 트랜잭션에서 볼 수 있게 되는 현상

READ COMMITTED

  1. rdb에서 대부분 기본적으로 사용하고 있는 격리 수준임
  2. 실제 테이블 값을 가져오는 것이 아니라 undo 영역에 백업된 레코드에서 값을 가져옴
    1. undo 로그: update 또는 delete 같은 문장으로 데이터를 변경하였을 때 변경되기 전의 데이터를 보관하는 곳 --> 트랜잭션 롤백 대비, 트랜잭션의 격리 수준 유지
  3. 문제점
    1. non-repeatable read
      1. 트랜잭션-1이 Commit한 이후 아직 끝나지 않는 트랜잭션-2가 다시 테이블 값을 읽으면 값이 변경됨
      2. 하나의 트랜잭션내에서 똑같은 SELECT 쿼리를 실행했을 때는 항상 같은 결과를 가져와야 하는 REPEATABLE READ의 정합성에 어긋남

REPEATABLE READ

  1. MySQL에서는 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽음
  2. 문제점
    1. PHANTOM READ
      1. 삽입으로 인해 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안 보였다가 하는 현상

SERIALIZABLE

  1. 한 트랜잭션에서 읽고 쓰는 레코드를 다른 트랜잭션에서 절대 접근 불가
  2. 가장 간단한 격리 수준이지만 가장 엄격한 격리 수준
  3. 성능 측면에서 동시 처리 성능이 가장 낮음
  4. phantom read가 발생하지는 않지만 데이터베이스에서는 거의 사용 되지 않음

0개의 댓글