VACUUM (Postgres)
PostgreSQL のメンテナンス処理で、UPDATE/DELETE のあとに MVCC が残す「死んだ行」(デッドタプル)を片付ける。これがないとテーブルは膨張し、トランザクション ID も尽きかねない。通常は autovacuum が自動で担当する。
必要な理由: PostgreSQL は行を上書きしない。UPDATE は新しいバージョンを作り、古いほうに死亡の印を付ける。VACUUM はその領域を再利用可能にする(ファイルは縮まない。縮めるのは排他ロックを取る VACUUM FULL だ)。もう一つの重要な仕事が、古い行を「凍結」してトランザクション ID の周回(データベースを停止させうる大事故)を防ぐことである。VACUUM ANALYZE ならプランナの統計情報も更新する。
ブロートは原因不明の性能低下のよくある犯人だ。監視には pg_stat_user_tables を使う。PostgreSQL 17 以降は VACUUM のメモリ使用量が大きく改善された。