
트랜잭션의 ACID 속성 중 지속성(Durability)은 데이터베이스에 저장된 데이터의 영구성을 보장하는 특성이다. 시스템 장애나 전원 손실과 같은 예기치 않은 상황에서도 커밋된 트랜잭션의 결과가 영구적으로 보존되도록 보장한다.
지속성(Durability)이란?
지속성은 크게 두 가지 측면에서 의미를 가진다.
- 데이터의 영구 보존
- 커밋된 트랜잭션의 결과가 비휘발성 저장소에 안전하게 저장
- 시스템 장애나 전원 손실 후에도 데이터 보존 보장
- 복구 가능성
- WAL(Write Ahead Log)을 통한 데이터 복구 메커니즘 제공
- 시스템 장애 발생 시 데이터 일관성 유지
지속성의 작동 원리
기본 메커니즘
지속성은 다음과 같은 핵심 메커니즘을 통해 구현된다.
- 트랜잭션 커밋
- 변경 사항을 영구 저장소에 기록
- 메모리 버퍼의 데이터를 디스크에 플러시
- WAL(Write Ahead Log)
- 변경 사항을 로그에 먼저 기록
- 시스템 복구 시 참조 포인트로 활용
- 스냅샷(Snapshot)
- 주기적인 데이터베이스 상태 저장
- 복구 시간 단축을 위한 체크포인트
데이터 지속성과 복구
주요 장애 상황과 그에 대한 대응 방식은 다음과 같다.
- 시스템 장애 상황
- 상황: 트랜잭션 커밋 후 시스템 충돌 발생
- 해결: WAL을 통한 데이터 상태 복원
- WAL의 마지막 체크포인트부터 순차적으로 변경 사항 재실행
- 커밋되지 않은 트랜잭션은 롤백 처리
- 전원 손실 상황
- 상황: 갑작스러운 전원 공급 중단
- 해결:- 비휘발성 저장소의 데이터 활용
- WAL과 체크포인트를 조합한 복구 전략 실행
- 상황: 갑작스러운 전원 공급 중단
지속성 구현 기술
주요 구현 방식
- WAL(Write Ahead Log)
- 변경 사항의 순차적 기록
- 즉각적인 디스크 동기화
- 빠른 복구 지원
- 스냅샷(Snapshot)
- 주기적인 데이터베이스 전체 상태 저장
- 복구 시간 단축을 위한 체크포인트 제공
- Fsync 활용
- OS 캐시 우회
- 직접적인 디스크 쓰기
- 데이터 안정성 강화
성능과 트레이드오프
지속성 구현에는 다양한 트레이드오프가 존재한다.
성능 관련 고려사항
| 요소 | 높은 지속성 | 낮은 지속성 |
|---|---|---|
| 쓰기 속도 | 상대적으로 느림 | 상대적으로 빠름 |
| 리소스 사용 | 높음 | 낮음 |
| 데이터 안전 | 매우 안전 | 일부 위험 존재 |
| 복구 능력 | 완벽한 복구 가능 | 제한적인 복구 가능 |
구현 전략
- 강한 지속성
- 모든 트랜잭션을 즉시 디스크에 동기화
- 완벽한 데이터 보존 보장
- 성능 저하 감수
- 유연한 지속성
- 주기적인 체크포인트 활용
- 일부 데이터 손실 허용
- 성능 최적화 중시
마치며
데이터베이스 시스템에서 지속성은 데이터의 안정성과 신뢰성을 보장하는 핵심 요소다. 시스템의 요구사항과 특성에 따라 적절한 지속성 구현 전략을 선택해야 하며, 다음과 같은 요소들을 고려해야 한다.
- 시스템의 성능 요구사항과 처리량
- 허용 가능한 데이터 손실 허용 범위
- 목표 복구 시간
- 하드웨어 자원 가용성
결과적으로, 각 시스템에 맞는 최적의 지속성 구현 전략을 선택하는 것이 중요하다.
이 글은 Udemy의 【한글자막】 데이터베이스 엔지니어링 ( Database Engineering ) 마스터하기!강의를 토대로 공부한 내용을 정리한 것입니다.