PostgreSQL는 vacuum을 통해서 테이블 사용하는 공간에 대한 최적화 및 cleanup을 진행
해당 설정은 postgresql.conf에서 지정
1) vacuum wakeup 설정
autovacuum_naptime = 1 (1분마다 실행)
2) vacuum worker 프로세스 설정
autovacuum_max_workers = 3 (3개 worker fork)
3) vacuum 수행 기준
autovacuum_vacuum_threshold = 50 (50개 row이상 변경시 공간 정리)
autovacuum_analyze_threshod = 50 (50개 row이상 변경시 통계 정보 수집)
autovacuum_vacuum_scale_factor = 0.2 (전체 데이터중 20%이상 변경시 공간 정리)
autovacuum_analyze_scale_factor = 0.1 (전체 데이터중 10%이상 변경시 통계 정보 수집)
vacuum full은 테이블에 lock을 걸고 전체를 rewrite하는 작업을 함으로 큰 테이블에 대해서는 안하는게 좋음
CREATE TABLE test (id int) WITH (autovacuum_enabled = off); -- vacuum off
INSERT INTO test SELECT * FROM generate_series(1, 100000);
SELECT pg_size_pretty(pg_relation_size('test')); -- table size check
VACUUM test;
delete하고 나서 연속된 공간이 확보되지 않는 이상 vacuum를 진행한다고 해도 사이즈는 줄어들
가능성이 없음
'RDB > PostreSQL' 카테고리의 다른 글
PostgreSQL 12 테이블 조인 방식 (0) | 2020.05.04 |
---|---|
PostgreSQL 12 snapshot too old (0) | 2020.04.29 |
PostgreSQL 12 lock (0) | 2020.04.27 |
PostgreSQL 12 transactions (0) | 2020.04.22 |
PostgreSQL 12에 신규 기능 (0) | 2020.04.20 |