지속성이란?

공부용·2025년 8월 26일

트랜잭션이 성공적으로 커밋(commit)되면, 그 변경 내용이 영구적으로 저장되어 시스템에 장애가 발생해도 데이터가 사라지지 않는 것을 보장하는 성질이다.

즉, 커밋된 트랜잭션은 전원이 꺼지거나 시스템이 충돌하는 상황에서도

비휘발성 저장소(non-volatile storage)에 안전하게 보관된다.


지속성을 보장하는 기술

데이터베이스는 지속성을 보장하기 위해 여러 기술을 사용한다. 실제 데이터 파일(테이블, 인덱스 등)의 모든 변경 사항을 디스크에 직접 쓰는 것은 매우 비효율적이고 비싼 작업이기 때문이다.

  • WAL (Write-Ahead Log): 실제 데이터를 디스크에 쓰기 전에, 변경 사항에 대한 로그(log)를 먼저 디스크에 기록하는 방식이다. 이 로그 파일은 보통 변경 내용만 압축해서 순차적으로 기록하므로, 데이터 파일 전체를 쓰는 것보다 훨씬 빠르다. 시스템에 문제가 생겨도 이 로그를 보고 데이터를 복구할 수 있다.

  • AOF (Append-only File): WAL과 유사한 개념으로, 모든 쓰기 작업을 파일에 끝에 순차적으로 추가하여 기록하는 방식이다.


OS 캐시와 fsync의 역할

운영체제는 성능 향상을 위해 쓰기 요청이 오면 데이터를 즉시 디스크에 쓰지 않고 일단 메모리에 있는 OS 캐시에 저장한다. 하지만 이 상태에서 시스템이 다운되면 캐시에 있던 데이터가 유실될 위험이 있다.

이를 방지하기 위해 데이터베이스는 fsync라는 OS 명령어를 사용한다. 이 명령어는 OS 캐시에 있는 데이터를 디스크에 즉시 쓰도록 하여 데이터의 지속성을 보장한다.

fsync를 너무 자주 호출하면 커밋할 때마다 디스크 쓰기를 기다려야 하므로 시스템 성능이 저하될 수 있다. 따라서 많은 데이터베이스는 이 fsync호출 시점을 조절하여 지속성과 성능 사이의 균형을 맞춘다.

profile
공부 내용을 가볍게 적어놓는 블로그.

0개의 댓글