DBAtlas · 데이터베이스 운영 아틀라스

여유 공간 회수(shrink / vacuum / compact)

Oracle

ALTER TABLE customer ENABLE ROW MOVEMENT;
ALTER TABLE customer SHRINK SPACE;

SHRINK는 high water mark(HWM)를 낮춘다. 인덱스도 축소하려면 SHRINK SPACE CASCADE를 사용한다.

PostgreSQL

-- Online, light locking (does not return space to the OS):
VACUUM (VERBOSE, ANALYZE) customer;
-- Return space to the OS (locks the table!):
-- VACUUM FULL customer;

VACUUM FULL은 AccessExclusiveLock을 잡고 테이블을 다시 쓴다. 피크 시간에는 실행하지 않는다. 대안: pg_repack.

MySQL

OPTIMIZE TABLE customer;

InnoDB에서는 테이블을 재구축하고 data_free 공간을 반환한다. 대형 테이블에서는 오래 걸린다.

SQL Server

-- Generally NOT RECOMMENDED (causes fragmentation). If really needed:
DBCC SHRINKFILE (N'MyDB_data', 1024);  -- target 1024 MB

데이터 파일을 축소하면 인덱스 단편화가 발생하므로 이후 인덱스를 REBUILD한다. 로그는 먼저 백업한다.

MongoDB

db.runCommand({ compact: "customer" })

WiredTiger에서는 여유 공간을 운영 체제에 반환하려고 시도한다(항상 가능하지는 않음). 4.4+에서는 읽기/쓰기를 블로킹하지 않고 같은 컬렉션의 일부 DDL 작업만 블로킹한다. IO 부하가 크므로 secondary에서 유지보수 시간에 실행하는 것이 안전하다.

Redis

MEMORY PURGE
# Tries to return jemalloc fragmentation to the OS

activedefrag yes 설정은 온라인 자동 조각 모음을 수행한다. MEMORY DOCTOR는 권장 사항을 제시한다.

DBAtlas에서 열기 →