트랜잭션(Transaction)

최민수·2023년 1월 6일
0

CS 전공지식

목록 보기
3/36
post-thumbnail

트랜잭션(Transcation)?

  • 데이터베이스에서 하나의 논리적 기능을 수행하기 위해 여러 개의 쿼리들을 하나로 묶는 작업의 단위.
    - 원자성, 일관성, 독립성, 지속성 (ACID) 특징을 기억하자.

ACID 특징

  • 원자성(atomicity): "all or nothing". 하나의 트랜잭션 안의 일이 모두 수행됐거나 안됐거나를 보장하는 특징.

  • 일관성(Consistency): 데이터를 정해진 규칙에 따라 변경하는 것.

  • 격리성(Isolation): 트랜잭션 수행 시 서로 간에 끼어들지 못하는 것.

  • 지속성(Durability): 성공적으로 실행된 트랜잭션은 완전히 반영되어야 함. 롤백, 시스템 복구, 저널링 등의 기능이 있어야 함을 뜻함.

Transaction 관리를 위한 DBMS의 전략

DBMS의 Storage System에 속하는 모듈 중 하나로, Main Memory에 유지하는 페이지를 관리하는 모듈인 "Page Buffer의 버퍼 관리 정책"에 따라 전략이 달라짐.

  1. Undo: 정상적으로 종료되지 않은 transaction이 변경한 page들은 원상 복구 되어야 하는데, 이 복구를 undo라고 함.

    • "수정된 페이지를 디스크에 쓰는 시점"에서의 2가지 정책
      - steal: logging하여 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책.
      - ~steal: 버퍼 크기를 매우 크게 설정해 수정된 페이지들을 EOT (End Of Transaction)까지는 버퍼에 유지하는 정책.
  2. Redo: 이미 commit한 transaction의 수정을 재반영하는 복구 작업.

    • "Transaction이 종료되는 시점에 해당 transaction이 수정한 page를 디스크에 쓸 것인가 아닌가"로 분류한 2가지 정책
      - force: 수정했던 모든 페이지를 Transaction commit 시점에 disk에 반영.
      - ~force: commit 시점에 반영하지 않고 따라서 오류 발생 시 db에 반영되지 않을 수 있기에 redo 복구가 필요.

격리 수준

  • Read_uncommited(Lv.0): 가장 낮은 격리 수준. 트랜잭션이 커밋되기 이전에 다른 트랜잭션에 노출이 됨. 그러나 가장 빠름. 데이터 무결성을 위한다면 지양해야 하나, 많은 양의 데이터를 어림잡아 집계하는 데 사용하는 것은 추천됨.

  • Read_commited(Lv.1): 많은 데이터베이스의 기본값. 커밋 완료된 데이터에 대해서만 조회 허용. 그러나 수정하는 행위를 허용하기 때문에 non-repeatable read 현상이 일어날 수 있음.

  • Repeatable_read(Lv.2): 트랜잭션 범위 내에서 조회한 데이터 내용이 항상 동일함을 보장함. 다른 사용자는 트랜잭션 영역에 해당되는 데이터에 대한 수정 불가능. MySQL Default 설정값.

  • Serializable(Lv.3): 엄격한 격리성. 완벽한 읽기 일관성 모드를 제공함.
    그러나 순차적으로 진행하기 때문에 교착상태 일어날 확률 크고 성능이 떨어짐.

격리 수준에 따라 발생하는 현상

  • Dirty read: 한 트랜잭션이 실행 중일 때 다른 트랜잭션에 의해 수정되었고, 아직 커밋되지 않은 상태임에도 그 바뀐 데이터를 조회하게 되는 경우.
    - 발생 Level: Read Uncommitted

  • Non-repeatable read: 한 트랜잭션 안에서 같은 행에 두 번 조회가 발생했는데 그 값이 다른 경우. 즉, 행의 값이 달라질 수 있다는 것이 다른 행이 선택될 수 있다는 Phantom read와 다른 점임.
    - 발생 Level: Read committed, Read Uncommitted

  • Phantom read: 한 트랜잭션 안에서 동일한 쿼리를 보냈을 때, 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상.
    - ex) 어떤 트랜잭션이 조회한 데이터에 다른 트랜잭션이 값을 삽입. 그리고 다시 조회.

    • 발생 Level: Repeatable Read, Read Committed, Read Uncommitted

Reference
면접을 위한 CS 전공지식 노트(주홍철) p.206-212
https://gyoogle.dev/blog/computer-science/data-base/Transaction.html
https://gyoogle.dev/blog/computer-science/data-base/Transaction%20Isolation%20Level.html

profile
CS, 개발 공부기록 🌱

0개의 댓글