티스토리 뷰

728x90
반응형


DB에서도 나오고 InMemoryDB에서도 나오는 용어중에 Trasaction Isolation level 에 대해 정리를 해보려고 한다. 왜? 많이 나오는데 계속 정리는 하는데...계속 기억이 안 나기 때문이다...그리고 관련된 그림을 찾지 못해서.. 내가 이해한 대로 그림을 그려서 이해를 좀 더 쉽게 해보려고 한다.(잘못 된 것이 있다면, 알려주세요)


일단 가장 기본적으로 현상 3가지를 알아야 한다.

* 3가지 현상

  • Dirty
    • Commit하지 않은 데이터에 대한 접근성 허용
  • NonRepeatable
    • 한 트랜잭션안에서 같은 쿼리를 했는 데 결과가 상이하게 나오는 비일관성 발생
      (같은 쿼리가 실행하는 중간에 다른 트랜잭션이 데이터 값을 수정 및 삭제)
  • Phantom Read
    • 일정 범위의 레코드를 두번 이상 읽을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상
    • 트랜잭션 도중 새로운 레코드가 삽입되는 것을 허용.


* 트랜잭션 고립화 수준

  • 레벨0 (READ_UNCOMMITTED)
    • 트랜잭션에서 처리중인(커밋되지않은) 데이터를 다른 트랜잭션에서 읽는 것을 허용.
  • 레벨1(READ_COMMITTED)
    • 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용
    • 대부분의 DB가 이 레벨을 지원
    • Non-Repeatable Read, Phantom Read 현상 발생
  • 레벨2(REPEATABLE_READ)
    • 선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신하거나 삭제하는 것을 불허함으로써 같은 데이터를 두번 쿼리했을때 일관성 있는 결과를 리턴.
    • Phantom Read 현상 발생
  • 레벨3(SERIALIZABLE_READ)
    • 선행 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 중간에 새로운 레코드를 삽입하는 것도 막아줌
    • 완벽한 읽기 일관성 모드를 제공


이것을 그림으로 만들어 그려보면 다음과 같다.


그리고 레벨에 따라 Concurrnecy와 Consistency가 변경이 될 것이다.

다시 말해서, 일관성을 높이기 위해서는 Lock을 많이 잡아야 되고 따라서 동시성이 저하된다는 말이다.



Reference)

http://wiki.gurubee.net/pages/viewpage.action?pageId=3900389

http://blog.inspien.co.kr/54


 transaction_isolation_capture.pptx



반응형
댓글
250x250
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함