Hi, On 2023-01-24 14:49:38 -0800, Peter Geoghegan wrote: > From e41d3f45fcd6f639b768c22139006ad11422575f Mon Sep 17 00:00:00 2001 > From: Peter Geoghegan <p...@bowt.ie> > Date: Thu, 24 Nov 2022 18:20:36 -0800 > Subject: [PATCH v17 1/3] Add eager and lazy freezing strategies to VACUUM. > > Eager freezing strategy avoids large build-ups of all-visible pages. It > makes VACUUM trigger page-level freezing whenever doing so will enable > the page to become all-frozen in the visibility map. This is useful for > tables that experience continual growth, particularly strict append-only > tables such as pgbench's history table. Eager freezing significantly > improves performance stability by spreading out the cost of freezing > over time, rather than doing most freezing during aggressive VACUUMs. > It complements the insert autovacuum mechanism added by commit b07642db.
However, it significantly increases the overall work when rows have a somewhat limited lifetime. The documented reason why vacuum_freeze_min_age exist - although I think it doesn't really achieve its documented goal anymore, after the recent changes page-level freezing changes. > VACUUM determines its freezing strategy based on the value of the new > vacuum_freeze_strategy_threshold GUC (or reloption) with logged tables; > tables that exceed the size threshold use the eager freezing strategy. I think that's not a sufficient guard at all. The size of a table doesn't say much about how a table is used. > Unlogged tables and temp tables will always use eager freezing strategy, > since there is essentially no downside. I somewhat doubt that that is true, but certainly the cost is lower. > Eager freezing is strictly more aggressive than lazy freezing. Settings > like vacuum_freeze_min_age still get applied in just the same way in > every VACUUM, independent of the strategy in use. The only mechanical > difference between eager and lazy freezing strategies is that only the > former applies its own additional criteria to trigger freezing pages. That's only true because vacuum_freeze_min_age being has been fairly radically redefined recently. Greetings, Andres Freund