CS
데이터베이스 트랜잭션
다오__
2023. 5. 26. 11:49
트랜잭션의 이해
데이터 동시 접근의 문제

동일 데이터에 다수 사용자의 접근 허용 시 일관성이 훼손
트랜잭션의 개념
- 데이터베이스를 조작하기 위한 하나의 논리적 단위를 이루는 일련의 연산의 집합
- 데이터베이스를 사용하여 처리하는 작업을 하나의 묶음으로 인식하여 묶음 단위로 실행되도록 정의한 개념
트랜잭션의 특징
- 다수의 연산으로 구성된 트랜잭션이 사용자에게 단일작업처럼 다뤄지도록 ACID특징을 준수

트랜잭션 읽기와 쓰기
트랜잭션의 두 연산
- READ
- WRITE
ACID특성 유지
- 데이터베이스 시스템에 문제가 생겼을 시 특정 연산까지만 처리가 되고 유지가 될까? 답은 아니다 ACID에 의해서 트랜잭션이 마무리할 수 없다면 처리되기 이전으로 원자성에 의해서 롤백 한다.
- 트랜잭션이 실행된 순간 일관성이 훼손되어도 연산이 끝날때에는 일관성이 유지되도록 만들어주는 특성이 있다.
- 트랜잭션이 실행중 다른 트랜잭션이 끼어들어 처리하려고 한다면 작업을 중단시키거나 또는 방해해서 처리를 하지 못하도록 하는 고립성으 ㅣ특징이 있다.
- 트랜잭션이 모두 끝난다음에 하드디스크의 물리적 오류가 생기더라도 지속성을 만족시키기 위해 또다른 곳에 저장되어 원복가능한 상태를 만족한다.
트랜잭션 연산자

트랜잭션의 5가지 상태 변화
- 동작 : 트랜잭션이 시작을 준비 또는 실행 중인 상태
- 부분 커밋 : 마지막 연산을 실행한 직후의 상태
- 커밋 : 모든 실행이 성공적으로 완료된 후의 상태
- 실패 : 실행이 정상적으로 진행될 수 없는 상태
- 중단 : 실행 실패로 롤백되고 시작 이전의 상태로 환원된 상태

트랜잭션의 동시성
동시성 고려
- DBMS는 다수의 사용자가 데이터베이스를 공용으로 사용하기 위한 목적으로 도입
- 트랜잭션 동시 실행의 이점
- 다중 사용자 환경에서 트랜잭션 동시 실행으로 데이터 갱신 시, 일관성 훼손 문제가 발생
- 동시성 제어
적용 트랜잭션
- A와 B에 각각 10.000과 20.000원 잔액
- T: 1000원을 계좌 A에서 B로 이체
- T: 계좌 A의 잔고에서 20%를 B로 이체

스케줄
다수의 트랜잭션에 포함된 연산의 실행 순서를 명시한 것
- 직렬 스케줄
- 일관성을 훼손하지 않는다.
- T와T가 순차적으로 실행되는 스케줄이다
- 병렬 스케줄
- 일관성을 훼손할 수 있다.
- T0과 T1이 비순차적 실행되는 수케줄
트랜잭션의 직렬화
직렬 가능 스케줄
- 복수개의 트랜잭션이 동시에 수행된 결과가 직렬 수케줄의 결과와 통일한 스케줄

직렬 가능 스케줄의 정의
- 트랜잭션 간 연산 순서를 교환하여 트랜잭션을 직렬 스케줄과 동등하게 변환이 가능한 스케줄
- 사용된 READ와 WRITE연산 교환 시 상황에 따라 실행 결과에 일관성이 훼손되는 현상(충돌)이 발생
- 연산 순서의 교환(단, Ii는 Ti의 연산

첫번째를 제외한 다른 연산은 교환 시 충돌이 일어난다
충돌 동등
- 특정 스케줄 S에서 충돌이 일어나지 않는 연산의 순서를 바꿔 스케줄 S'로 변환이 가능한 상태


WRITE 있지만 서로 다른 데이터를 읽고 쓰기 이기 때문에 교환을 해도 아무런 문제가 되지 않는다. 같은 데이터를 가지고 교환했을 때 문제가 생기는 것이다.


마찬가지로 WRITE과 WRITE을 교환하지만 서로 다른 데이터를 다루기 때문에 교환이 가능하다.
충돌 직렬성

왼쪽에서 오른쪽으로의 교환이 가능했을 때 우리는 충돌 직렬성을 확보했다라고 할 수 있다.
- 순서 교환이 가능한 연산을 교환하여 직렬 스케줄의 연산과 동등하게 변환이 가능한 스케줄
트랜잭션의 회복
회복의 개념
- 원자성을 보장하기 위해 트랜잭션 실패 시 실행된 모든 연산을 실행 이전 상태로 복원하는 기법

위 사례를 보자
READ(B)에서 문제가 발생했지만 T6에서 벌써 Commit이 되었기 때문에 지속성에 의해 READ(A)의 값을 되돌릴수 없다
- 회복 불가능한 스케줄
회복 가능한 스케줄
- Ti와 Tj에 대해 Ti가 기록한 데이터를 Tj가 읽을 때 Ti의 커밋이 Tj보다 먼저 나타나는 스케줄
- 연쇄적 롤백 유발 가능

.
비 연쇄적 스케줄
- 연쇄적 롤백으로 발생할 수 있는 대량의 회복연산을 방지하기 위해 연쇄적이지 않은 스케줄로 구성된 스케줄
- Ti가 기록한 데이터를 읽을 때 Ti의 커밋이 Tj의 읽기 연산보다 먼저 나타나는 스케줄