[Back-end] Transactions, ACID

Geun·2022년 3월 19일
0

Back-end

목록 보기
29/74
post-custom-banner

트랜잭션이란

트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업단위이다.

  • 상태 변화: SQL 질의어를 통해 DB에 접근하는 것을 말한다.

    • SELECT
    • INSERT
    • DELETE
    • UPDATE
  • 작업단위: 많은 SQL 명령문들을 사람이 정하는 기준에 따라서 정하는 것을 말한다.

    • 트랜잭션의 예로는 계좌 간의 자금이체가 많이 언급된다.
      한 계좌에서 10만원을 인출하여 다른 계좌로 10만원을 입금하는 이체 작업은 전체 작업이 정상적으로 완료되거나, 만약 정상적으로 처리될 수 없는 경우에는 아무것도 실행되지 않고 처음 상태로 되돌려져야 한다. 이런 트래잭션은 다양한 데이터 항목들을 액세스 하고 갱신하는 프로그램 수행의 단위가 된다.

트랜잭션 설계를 잘 만드는 것은 데이터를 다룰 때 많은 이점이 있다.


트랜잭션 특징 (ACID)

  • 원자성(Atomicity)
    트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다.

  • 일관성(COnsistency)
    트랜잭션의 작업처리 결가는 항상 일관성 있어야 한다.

  • 독립성(Isolation)
    둘 이상의 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션 수행에 영향을 받지 않고 독립적으로 수행되어야 한다.

  • 지속성(Durability)
    트랜잭션이 성공적으로 완료되었으면 결과는 영구적으로 반영되어야 한다.


트랜잭션 관리를 위한 DBMS의 전략

트랜잭션 관리를 위한 DBMS의 전략을 이해하기 위해서는 우선 DBMS의 개략적인 구조와 버퍼 관리자 및 트랜잭션 관리와 연관된 버퍼관리 정책에 대한 이해가 필요하다.

데이터베이스 시스템은 보통 비휘발성 저장 장치인 디스크에 데이터를 저장하며 전체 데이터베이스의 일부분을 메인 메오리에 유지한다.


DBMS는 크게 2가지로 Query Processor(질의 처리기)와 Storage System(저장 시스템)으로 나뉜다.
DBMS는 고정 길이의 페이지(page)로 저장하며 디스크에서 읽거나 쓸 때에 페이지 단위로 입출력이 이루어진다.

UNDO

수정된 page들이 Buffer 교체 알고리즘에 따라 디스크에 출력될 수 있다.
Buffer 교체는 trasaction과는 무관하게 Buffer의 상태에 따라서 결정된다.
이로 인하여 정상적으로 종료되지 않은 transaction이 변경한 page들이 원상 복구되어야 하는데 이런 복구를 undo라고 한다.

수정된 페이지를 디스크에 쓰는 시점에서의 정책 두 가지는 다음과 같다.

  • STEAL: 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책

    • 대부분의 DBMS가 채택하는 Buffer 관리 정책이다.
    • UNDO logging과 복구를 필요로 한다.
  • ¬STEAL: 수정된 페이지들을 최소한 트랜잭션 종료 시점(EOT, End of Transaction)까지는 버퍼에 유지하는 정책

    • UNDO 작업이 필요하지 않지만, 매우 큰 메모리 버퍼가 필요하다.

STEAL 정책은 수정된 페이지가 어떠한 시점에도 디스크에 써질 수 있기 때문에 필연적으로 UNDO 로깅과 복구를 수반하는데, 거의 모든 DBMS가 채택하는 버퍼 관리 정책이다.

REDO

이미 commit한 transaction의 수정을 재반영하는 복구 작업이다.
Buffer 관리 정책에 영향을 받는다.

Transaction이 종료되는 시점에 해당 transaction이 수정한 page를 디스크에 쓸 것인가 아닌가를 기준으로 두 가지 정책은 다음과 같다.

  • FORCE: 수정했던 모든 페이지를 트랜잭션 커밋 시점에 디스크에 반영하는 정책
    • transaction이 commit 되었을 때 수정된 페이지들이 disk 상에 반영되므로 REDO가 필요 없다.
  • ¬FORCE: 수정했던 페이지를 트랜잭션 커밋 시점에 디스크에 반영하지 않는 정책
    • transaction이 disk 상의 db에 반영되지 않을 수 있기에 REDO 복구가 필요하다.

거의 모든 DBMS가 채택하는 정책은 ¬FORCE 정책이다.


참고자료

https://gyoogle.dev/blog/computer-science/data-base/Transaction.html
https://d2.naver.com/helloworld/407507

post-custom-banner

0개의 댓글