트랜잭션
트랜잭션의 개념
- 데이터베이스를 조작하기 위한 하나의 논리적 단위를 이루는 일련의 연산의 집합
- 데이터베이스를 사용하여 처리하는 작업을 하나의 묶음으로 인식하여 묶음 단위로 실행되도록 정의한 개념
특징
다수의 연산으로 구성된 트랜잭션이 사용자에게 단일작업처럼 다뤄지도록 ACID 특징을 준수함
ACID
- 원자성(atomicity): 하나에 트랜잭션에 포함된 모든 연산은 완전히 수행되거나 전혀 수행되지 않음
- 일관성(consistency): 특정 트랜잭션이 수행되기 전과 후에 데이터베이스가 일관된 상태를 유지
- 고립성(isolation): 특정 트랜잭션이 데이터베이스를 갱신하는 동안 다른 트랜잭션에 의해 방해받지 않음
- 지속성(durability): 완료된 트랜잭션의 결과는 어떠한 시스템의 장애에도 데이터베이스에 반영되어야 함
트랜잭션의 연산
- Read(X): 데이터베이스에서 데이터 X를 읽고, 트랜잭션이 실행되는 메모리의 변수 X에 값을 저장하는 연산
- Write(X): 트랜잭션이 실행되는 메모리에 있는 변수 X의 값을 데이터베이스에 저장하는 연산
계좌 A에서 B로 1000원을 이체하는 트랜잭션
Read(A)
A := A - 1000
Write(A)
Read(B)
B := B + 1000
Write(B)
트랜잭션 실행의 연산
- Commit: 트랜잭션 연산에 의해 갱신된 데이터 항목의 값을 데이터베이스에 반영시키고 지속성을 확보하는 연산
- Rollback: 트랜잭션이 중단되기 이전까지 수행한 연산에 의해 갱신된 모든 데이터 항목의 값을 무효화하여 일관성을 확보하는 연산
트랜잭션의 5가지 상태 변화
- 동작: 트랜잭션이 시작을 준비 또는 실행 중인 상태
- 부분 커밋: 마지막 연산을 실행한 직후의 상태
- 커밋: 모든 실행이 성공적으로 완료된 후의 상태
- 실패: 실행이 정상적으로 진행될 수 없는 상태
트랜잭션의 동시성
동시성 고려
- DBMS는 다수의 사용자가 데이터베이스를 공용으로 사용하기 위한 목적으로 도입
- 트랜잭션 동시 실행의 이점
- 트랜잭션 처리율과 자원 이용률 향상
- 트랜잭션 대기시간 감소
- 다중 사용자 환경에서 트랜잭션의 동시 실행(병렬 스케줄)로 데이터 갱신 시, 일관성 훼손 문제가 발생
직렬 가능 스케줄
- 트랜잭션간 연산 순서를 교환하여 트랜잭션을 직렬 스케줄과 동등하게 변환이 가능한 스케줄
- 사용된 Read와 Write 연산 교환 시 상황에 따라 실행 결과에 일관성이 훼손되는 현상이 발생
- 연산 순서의 교환은 다른 데이터를 읽거나 쓸 때, 쓰기를 지나가지 않는 선에서 읽기끼리 교환 가능(충돌 동등)
충돌 직렬성
순서 교환이 가능한 연산을 교환하여 직렬 스케줄의 연산과 동등하게 변환이 가능한 스케줄
트랜잭션의 회복
원자성을 보장하기 위해 트랜잭션 실패 시 실행된 모든 연산을 실행 이전 상태로 복원하는 기법
- 커밋한 트랜잭션 or 스케줄은 롤백(회복)이 불가능
- 연쇄적 롤백의 경우 데이터베이스에 오버헤드를 일으킬 수 있다
비연쇄적 스케줄
- 연쇄적 롤백으로 발생할 수 있는 대량의 회복 연산을 방지하기 위해 연쇄적이지 않은 스케줄로 구성된 스케줄
- Ti가 기록한 데이터를 읽을 때 Ti의 커밋이 Tj의 읽기 연산보다 먼저 나타나는 스케줄