본문으로 건너뛰기
vacuum_truncate

vacuum_truncate

버전기본값context타입
18trueuserboolean
19trueuserboolean

vacuum이 테이블 끝의 빈 페이지들을 잘라내(truncate) 디스크 공간을 운영체제에 반환할지 여부를 정한다. 기본값은 true다.

true면 VACUUM과 autovacuum이 테이블 말미의 빈 페이지를 잘라내고 그 공간을 운영체제로 되돌린다. 주의할 점은 이 truncate 작업이 테이블에 ACCESS EXCLUSIVE lock을 요구한다는 것이다. 짧은 시간이지만 해당 테이블의 모든 접근과 충돌하므로, lock 경합에 민감한 테이블에서는 vacuum이 트리거하는 이 순간이 문제가 될 수 있다. VACUUM 명령의 TRUNCATE 옵션을 명시하면 이 파라미터보다 우선하며, 개별 테이블의 storage parameter로도 덮어쓸 수 있다. context가 user라서 세션 단위 설정도 가능한데, 이 파라미터가 GUC로 승격된 것은 PostgreSQL 18부터고 그 이전(12~17)에는 테이블 storage parameter로만 존재했다.

운영 노트: hot standby 환경에서는 primary의 truncate로 생기는 ACCESS EXCLUSIVE lock이 WAL을 타고 standby로 전달되어 standby의 장시간 쿼리를 취소시킬 수 있다. standby 쿼리 취소가 truncate 시점과 겹쳐 반복된다면, 문제가 되는 테이블만 storage parameter로 vacuum_truncate = false를 잡는 것이 대표적인 대응이다. 대신 테이블 끝 공간 반환이 멈추므로 파일 크기는 줄지 않는다는 점을 감수해야 한다.

출처: PostgreSQL 18 문서