DB/PostgreSQL

Unlogged Table 정의

박쿠리 2025. 4. 22. 00:31

1. UNLOGGED TABLE의 정의

UNLOGGED TABLE은 말 그대로 로그를 남기지 않는 테이블이다.
일반 테이블은 데이터를 수정할 때마다 WAL 로그를 기록하여 장애 복구, 복제 등에 활용되지만,
UNLOGGED 테이블은 WAL을 생략하고 디스크에만 데이터를 직접 저장한다.

특징 요약

WAL 기록 하지 않음 (복구 불가)
성능 빠름 (WAL 생략으로 I/O 감소)
장애 시 복구 불가 (DB 재시작 시 데이터 유실)
분산 및 병렬 처리 Greenplum에서는 segment별 분산 처리 가능
인덱스, 제약 조건 일반 테이블처럼 사용 가능
외부 테이블과 호환 INSERT 대상 등으로 사용 가능

사용 방법

테이블 생성 예시

-- 일반 테이블
CREATE TABLE normal_table (
    id SERIAL,
    name TEXT
);

-- UNLOGGED 테이블
CREATE UNLOGGED TABLE unlogged_table (
    id SERIAL,
    name TEXT
);

INSERT 예시

 
INSERT INTO unlogged_table (name)
VALUES ('Alice'), ('Bob');

Greenplum에서는 DISTRIBUTED BY 꼭 지정

CREATE UNLOGGED TABLE tmp_events (
    user_id TEXT,
    event_time TIMESTAMP,
    payload TEXT
) DISTRIBUTED BY (user_id);

3. 언제 UNLOGGED TABLE을 사용하는가?

사용하기 좋은 경우

상황설명
임시 중간 계산 결과 저장 대용량 데이터를 external table에서 읽고 INSERT
집계용 staging table array_agg, group by 연산을 빠르게 처리
ETL 처리 중간 단계 Airflow, Spark 등과 연계해 메모리 부담 줄일 때
로그성 데이터, 캐시 테이블 장애 복구보다는 속도가 중요한 경우

사용하면 안 되는 경우

상황이유
중요한 원천 데이터 장애 시 데이터 손실 가능
트랜잭션 무결성 필수 데이터 WAL이 없으므로 rollback 불완전할 수 있음
복제 대상 테이블 replication이나 backup에 포함되지 않음

4. 주의사항

  • DB 재시작 시 UNLOGGED 테이블의 모든 데이터는 초기화됨
  • 시스템 장애가 발생해도 복구 불가
  • replication 대상에 포함되지 않음
  • 일시적 데이터만 사용해야 함

결론

UNLOGGED TABLE은 속도는 빠르지만, 신뢰성은 낮은 고속 처리용 테이블이다.
ETL 처리의 중간 저장소, external table에서 읽은 데이터를 일시 저장하는 데 매우 유용하며,
WAL 부하를 줄이면서도 full SQL 기능을 사용할 수 있는 임시 저장소로서 큰 가치를 가진다.

 


 

트랜잭션으로 묶어서 실행하기

BEGIN;

INSERT INTO final_table
SELECT key, array_agg(val)
FROM unlogged_table
GROUP BY key;

COMMIT;
반응형