Work out vacuum frequency instantly with clear inputs, formula shown and shareable results.
PostgreSQL's MVCC leaves a dead tuple behind every update and delete, and autovacuum triggers when dead tuples exceed a scale factor of the table size. On a large hot table the default 20 percent means hundreds of millions of dead rows accumulate first, so the threshold is usually lowered for such tables — the duty cycle here shows whether continuous vacuuming is the result.
Vacuum cadence
dead tuples at trigger = rows x threshold; interval = trigger / churn rate; duration = rows / vacuum throughput; duty cycle = duration / interval
Because 20 percent of 80 million rows is 16 million dead tuples, which bloats the table and slows every scan long before vacuum runs. A fixed threshold or a much smaller scale factor keeps bloat bounded.
If vacuum never freezes old tuples, the transaction counter can approach wraparound and PostgreSQL will refuse writes. Monitoring the oldest unfrozen transaction age is essential on high-churn systems.