空き領域を回収(shrink / vacuum / compact)
Oracle
ALTER TABLE customer ENABLE ROW MOVEMENT;
ALTER TABLE customer SHRINK SPACE;SHRINK は高水位標(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 では空き領域を OS に返却しようとする(常に可能とは限らない)。4.4+ では読み取り/書き込みはブロックせず、同じコレクションに対する一部の DDL 操作のみをブロックする。IO 負荷が高いため、セカンダリ上でメンテナンスウィンドウに実行するほうが安全。
Redis
MEMORY PURGE
# Tries to return jemalloc fragmentation to the OSactivedefrag yes の設定でオンラインの自動デフラグが行われる。MEMORY DOCTOR は推奨事項を示す。