PostgreSQL에서 수천만 행을 DELETE하고 VACUUM을 돌려도 디스크가 안 줄어듭니다
조회 0 · 댓글 0
Ubuntu 22.04에 PostgreSQL 16을 직접 올려서 쓰고 있습니다. 로그성 테이블(event_log) 하나가 디스크를 많이 먹고 있어서 오래된 행 약 4천만 건을 조건으로 DELETE 했습니다. 지우고 나면 당연히 용량이 확 줄어들 줄 알았는데, 데이터 파일 디렉터리(base) 용량이 거의 그대로입니다.
DELETE 자체는 정상 커밋됐고 SELECT count(*)로 확인하면 행 수는 기대한 만큼 줄어 있습니다. 혹시 autovacuum이 아직 안 돈 건가 싶어서 수동으로 VACUUM도 직접 돌렸습니다. 로그에는 dead tuple을 제거했다는 메시지가 찍히는데 테이블 물리 크기는 변화가 없습니다.
=> SELECT pg_size_pretty(pg_relation_size('event_log'));
pg_size_pretty
----------------
38 GB
=> DELETE FROM event_log WHERE created_at < '2026-06-01';
DELETE 41233905
=> VACUUM (VERBOSE) event_log;
INFO: vacuuming "public.event_log"
INFO: "event_log": removed 41233905 dead row versions in ...
VACUUM
=> SELECT pg_size_pretty(pg_relation_size('event_log'));
pg_size_pretty
----------------
38 GBOS에서 df로 봐도 사용량이 거의 그대로입니다. 긴 트랜잭션이 잡고 있나 싶어 pg_stat_activity에서 idle in transaction 세션도 확인했는데 특별한 건 없었습니다. 애플리케이션 쪽 커넥션 풀도 재시작해봤습니다.
지난번 df/du 안 맞던 그 서버인데, 이번엔 DB가 문제입니다. VACUUM이 분명 돌았다고 나오는데 왜 테이블 파일 크기와 디스크 사용량은 그대로인지, 지운 공간을 실제로 OS에 돌려받으려면 뭘 봐야 하는지 궁금합니다.
로그인 후 답글을 남길 수 있습니다.