Autovacuum
テーブルに不要行(デッドタプル)が十分たまると、VACUUMとANALYZEを自動実行するPostgreSQLのバックグラウンドプロセス。既定で有効。設定ミスのautovacuumは、Postgresで最もよくある性能の落とし穴の一つだ。
起動条件は、不要行が autovacuum_vacuum_threshold + scale_factor × テーブルサイズ を超えたとき。既定のscale_factor(0.2 = 20%)は大きなテーブルには緩すぎることが多く、vacuumが動く前にかなり肥大化する。対策は、更新の多いテーブルごとにscale_factorを下げる、ワーカー数を増やす、autovacuum_vacuum_cost_limitを上げて追いつけるようにする、など。問題の兆候は、肥大化の進行、「wraparound」警告、突然の性能低下。やってはいけないのは「性能のために」autovacuumを切ることで、いずれ破局につながる。pg_stat_user_tablesのlast_autovacuumを監視しておくとよい。