데이터베이스 4: 트랜잭션
21 Jul 2024 #cs
트랜잭션 (Transaction)
DB의 상태를 변환하는 논리적 기능을 수행하기 위한 작업의 단위 혹은 일련의 연산들.
- DB 시스템에서 병행제어 및 회복 작업 시 처리되는 작업의 논리적 단위.
- 사용자가 시스템에 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위.
트랜잭션의 특성
-
Atomicity (원자성)
: 트랜잭션 연산은 DB에 모두 반영되도록 완료(commit)되던지, 전혀 반영되지 않도록 복구(rollback)됨.
- Consistency (일관성): 트랜잭션이 성공적으로 완료되면 DB 상태는 언제나 일관성 있는 상태가 됨.
- Isolation (독립성, 격리성, 순차성): 트랜잭션이 병행 실행되는 경우 다른 트랜잭션의 연산에 끼어들 수 없음.
- Durability (영속성, 지속성): 트랜잭션이 성공적으로 완료되면 그 결과는 시스템이 고장나더라도 영구적으로 반영됨.
CRUD 분석
프로세스와 테이블 간 CRUD 매트릭스를 만들어 트랜잭션을 분석하는 것.
- CRUD 분석을 통해 트랜잭션이 많이 몰리는 테이블을 파악할 수 있어, 디스크 구성 시 유용.
- CRUD 매트릭스 구성: 각 쉘에 Create, Read, Update, Delete의 앞 글자가 들어감.
병행제어 (Concurrency Control)
여러 개의 트랜잭션을 병행 수행할 때, 동시 실행되는 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 간 상호 작용을 제어하는 것.
- 종류: 로킹, 타임 스탬프 순서, 최적 병행수행, 다중 버전 기법
로킹 (Locking)
트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 잠금(Lock)을 요청하고, Lock이 허락되어야만 해당 로킹 단위를 액세스할 수 있도록 하는 병행제어 기법.
- 주요 데이터의 액세스를 상호 배타적으로 하게 됨.
- 로킹 단위 (Locking Granularity): 한꺼번에 로킹할 수 있는 객체의 크기.
-
데이터베이스, 파일, 레코드, 필드 등이 로킹 단위가 될 수 있음.
로킹 단위 크기 Lock 수 관리 난이도 병행성 수준 큼 적음 쉬움 낮아짐 작음 많음 어려움 높아짐
-
타임 스탬프 순서 (Time Stamp Ordering)
트랜잭션 실행 전에 시간표(Time stamp)를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 병행제어 기법. 직렬성 순서를 결정하기 위해 트랜잭션 처리 순서를 미리 선택하는 기법 중 가장 보편적인 방법.
회복 (Recovery)
트랜잭션 수행 중 장애가 발생하여 DB가 손상되었을 때, 손상되기 이전의 상태로 복구하는 작업.
- 종류: 연기 갱신 기법, 즉각 갱신 기법, 그림자 페이지 대체 기법, 검사점 기법
REDO와 UNDO
- Redo (재시도): DB가 비정상적으로 종료되었을 때, 디스크 내 로그에 트랜잭션의 시작(start)과 완료(commit) 기록이 있는 트랜잭션들을 재작업함. → 로그를 이용해 해당 데이터 항목에 대해 이전 값을 이후 값으로 변경하는 연산.
- Undo (취소): DB가 비정상적으로 종료되었을 때, 디스크 내 로그에 트랜잭션의 시작(start) 기록은 있지만 완료(commit) 기록은 없는 트랜잭션들이 변경한 내용을 모두 취소함. → 로그를 이용해 해당 데이터 항목에 대해 이후 값을 이전 값으로 변경하는 연산.
즉각 갱신 기법 (Immediate Update)
트랜잭션이 데이터를 갱신(update)하면 트랜잭션이 부분 완료 되기 전이라도 즉시 실제 DB에 반영하는 방법.
- 장애 발생 시 회복 작업을 대비해 갱신된 내용은 로그에 보관함.
- Redo와 Undo 모두 사용 가능.