반응형
설치·접속: PostgreSQL 설치와 접속
부제: 죽은 튜플을 회수하고 플래너 통계를 셸에서 갱신한다
vacuumdb -d shop --analyze # shop 청소 + 통계 갱신
vacuumdb -d shop -t orders --analyze # orders 테이블만
vacuumdb -d shop --analyze --verbose # 진행 내역 자세히
vacuumdb: vacuuming database "shop"
INFO: vacuuming "shop.pg_catalog.pg_proc"
INFO: finished vacuuming "shop.pg_catalog.pg_proc": index scans: 0
pages: 0 removed, 98 remain, 1 scanned (1.02% of total)
tuples: 0 removed, 3297 remain, 0 are dead but not yet removable
new relfrozenxid: 794, which is 72 XIDs ahead of previous value
avg read rate: 0.000 MB/s, avg write rate: 62.500 MB/s
buffer usage: 20 hits, 0 misses, 1 dirtiedvacuumdb는 VACUUM/ANALYZE SQL을 셸에서 실행하는 래퍼다. PostgreSQL은 UPDATE·DELETE를 해도 옛 행(죽은 튜플)을 바로 지우지 않고 남겨 두는데, VACUUM이 이 공간을 회수해 테이블 비대화(bloat)를 막는다. --analyze를 함께 주면 쿼리 플래너가 참고하는 통계까지 갱신해 실행 계획이 좋아진다. 평소에는 autovacuum이 알아서 돌지만, 대량 적재·삭제 직후나 배치 작업 뒤에는 수동으로 한 번 돌려 주는 게 안전하다. --verbose를 붙이면 위처럼 테이블별 회수·통계 내역이 그대로 찍힌다.
이렇게도 쓴다
특정 테이블만 콕 집어 청소·통계 갱신한다.
vacuumdb -d shop -t orders --analyze
통계만 빠르게 갱신한다. (대량 INSERT 직후 플랜 개선)
vacuumdb -d shop --analyze-only
여러 테이블을 병렬로 처리해 시간을 줄인다. (-j)
vacuumdb -d shop -j 4 --analyze
모든 DB를 한 번에 청소한다. (--all)
vacuumdb --all --analyze
트랜잭션 ID 소진이 걱정될 때 freeze까지 수행한다.
vacuumdb -d shop --freeze --analyze
공간을 물리적으로 되돌려주는 FULL 청소를 야간에 돌린다. (락 주의)
vacuumdb -d shop --full -t orders
매일 새벽 통계 갱신을 cron에 얹는다.
30 2 * * * vacuumdb -d shop --analyze-only -q반응형
'명령어 > DB' 카테고리의 다른 글
| [PostgreSQL] pg_dump 백업, '떴다'로 끝내지 말고 복원까지 검증하기 (0) | 2026.07.30 |
|---|---|
| [PostgreSQL] reindexdb 인덱스 재구성 (0) | 2026.07.30 |
| [PostgreSQL] pg_isready 접속 가능 여부 점검 (0) | 2026.07.30 |
| [PostgreSQL] pg_basebackup 물리 백업 (0) | 2026.07.30 |
| [PostgreSQL] pg_restore 아카이브 복원 (0) | 2026.07.30 |