선행 기록 로그(WAL)
PostgreSQL의 선행 기록 로그(WAL)란 무엇인가요?
선행 기록 로그는 모든 변경 사항을 데이터 파일에 반영하기 전에 기록하므로, PostgreSQL은 크래시 후에도 복구할 수 있습니다. WAL은 복제와 특정 시점 복구에도 사용됩니다.
선행 기록 로깅의 핵심 개념은 데이터 파일 변경 사항을 로그에 기록하고 그 로그를 영구 저장소에 플러시한 후에만 데이터 파일에 쓸 수 있다는 것입니다. 크래시가 발생하면 PostgreSQL은 마지막 체크포인트부터 로그를 재생해 데이터 파일을 일관된 상태로 되돌립니다.
트랜잭션이 커밋될 때 변경된 모든 데이터 페이지가 아니라 순차적인 로그만 플러시하면 되므로 WAL은 디스크 쓰기도 줄여 줍니다. 스트리밍 복제가 대기 서버로 보내는 것도, 연속 아카이빙이 특정 시점 복구를 위해 저장하는 것도 바로 이 WAL 레코드 스트림입니다. 로그 내의 위치는 로그 시퀀스 번호(LSN)라고 합니다.
예제
이 예제는 설정된 wal_level과, 10,000개 행이 있는 테이블을 만들기 전후의 현재 WAL 위치를 보여 줍니다. 새 테이블이 로그에 기록되었기 때문에 두 번째 위치가 더 앞으로 나아가 있습니다.
SHOW wal_level;
SELECT pg_current_wal_lsn();
CREATE TABLE wal_demo AS SELECT g FROM generate_series(1, 10000) AS g;
SELECT pg_current_wal_lsn();확장 없이 기본 PostgreSQL 16 또는 17에서 실행되는 일반 SQL입니다. 버려도 되는 빈 데이터베이스에서 실행하세요.
출처
PostgreSQL 공식 문서(영문)입니다.