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;반응형
'DB > PostgreSQL' 카테고리의 다른 글
| External table (PXF 기반) 에서 데이터 읽어올 때 - 메모리. I/O 문제 (0) | 2025.04.21 |
|---|---|
| 쿼리 튜닝 - 플랜 분석 예시 (memory 부족) (0) | 2025.02.18 |
| could not find segment file (0) | 2025.01.22 |
| cgroup (0) | 2024.11.18 |
| GPDB - Query Plan 예시 (0) | 2024.10.01 |