트랜잭션(Transaction)은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업단위이다.
상태 변화: SQL 질의어를 통해 DB에 접근하는 것을 말한다.
SELECT
INSERT
DELETE
UPDATE
작업단위: 많은 SQL 명령문들을 사람이 정하는 기준에 따라서 정하는 것을 말한다.
트랜잭션 설계를 잘 만드는 것은 데이터를 다룰 때 많은 이점이 있다.
원자성(Atomicity)
트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않아야 한다.
일관성(COnsistency)
트랜잭션의 작업처리 결가는 항상 일관성 있어야 한다.
독립성(Isolation)
둘 이상의 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션 수행에 영향을 받지 않고 독립적으로 수행되어야 한다.
지속성(Durability)
트랜잭션이 성공적으로 완료되었으면 결과는 영구적으로 반영되어야 한다.
트랜잭션 관리를 위한 DBMS의 전략을 이해하기 위해서는 우선 DBMS의 개략적인 구조와 버퍼 관리자 및 트랜잭션 관리와 연관된 버퍼관리 정책에 대한 이해가 필요하다.
데이터베이스 시스템은 보통 비휘발성 저장 장치인 디스크에 데이터를 저장하며 전체 데이터베이스의 일부분을 메인 메오리에 유지한다.
DBMS는 크게 2가지로 Query Processor(질의 처리기)와 Storage System(저장 시스템)으로 나뉜다.
DBMS는 고정 길이의 페이지(page)로 저장하며 디스크에서 읽거나 쓸 때에 페이지 단위로 입출력이 이루어진다.
수정된 page들이 Buffer 교체 알고리즘에 따라 디스크에 출력될 수 있다.
Buffer 교체는 trasaction과는 무관하게 Buffer의 상태에 따라서 결정된다.
이로 인하여 정상적으로 종료되지 않은 transaction이 변경한 page들이 원상 복구되어야 하는데 이런 복구를 undo라고 한다.
수정된 페이지를 디스크에 쓰는 시점에서의 정책 두 가지는 다음과 같다.
STEAL: 수정된 페이지를 언제든지 디스크에 쓸 수 있는 정책
¬STEAL: 수정된 페이지들을 최소한 트랜잭션 종료 시점(EOT, End of Transaction)까지는 버퍼에 유지하는 정책
STEAL 정책은 수정된 페이지가 어떠한 시점에도 디스크에 써질 수 있기 때문에 필연적으로 UNDO 로깅과 복구를 수반하는데, 거의 모든 DBMS가 채택하는 버퍼 관리 정책이다.
이미 commit한 transaction의 수정을 재반영하는 복구 작업이다.
Buffer 관리 정책에 영향을 받는다.
Transaction이 종료되는 시점에 해당 transaction이 수정한 page를 디스크에 쓸 것인가 아닌가를 기준으로 두 가지 정책은 다음과 같다.
거의 모든 DBMS가 채택하는 정책은 ¬FORCE 정책이다.
https://gyoogle.dev/blog/computer-science/data-base/Transaction.html
https://d2.naver.com/helloworld/407507