Re: New strategies for freezing, advancing relfrozenxid early
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Peter Geoghegan <pg@bowt.ie>
Cc: Jeff Davis <pgsql@j-davis.com>, Matthias van de Meent <boekewurm+postgres@gmail.com>, John Naylor <john.naylor@enterprisedb.com>, Justin Pryzby <pryzby@telsasoft.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-01-26T01:15:00Z
Lists: pgsql-hackers
Hi, On 2023-01-24 14:49:38 -0800, Peter Geoghegan wrote: > From e41d3f45fcd6f639b768c22139006ad11422575f Mon Sep 17 00:00:00 2001 > From: Peter Geoghegan <pg@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
Commits
-
Revert "Add eager and lazy freezing strategies to VACUUM."
- 6c6b49726644 16.0 landed
-
Add eager and lazy freezing strategies to VACUUM.
- 4d4179926139 16.0 landed
-
Refine the definition of page-level freezing.
- b37a08323964 16.0 landed
-
Avoid special XID snapshotConflictHorizon values.
- 6daeeb1f9196 16.0 cited
-
Add page-level freezing to VACUUM.
- 1de58df4fec7 16.0 landed
-
Remove overzealous MultiXact freeze assertion.
- 63c844a0a5d7 16.0 landed
-
Refactor how VACUUM passes around its XID cutoffs.
- 4ce3afb82ecf 16.0 landed
-
Deduplicate freeze plans in freeze WAL records.
- 9e5405993c1e 16.0 cited
-
Set relfrozenxid to oldest extant XID seen by VACUUM.
- 0b018fabaaba 15.0 cited
-
Only skip pages marked as clean in the visibility map, if the last 32
- bf136cf6e376 8.4.0 cited
-
Add vacuum_freeze_table_age GUC option, to control when VACUUM should
- 6587818542e7 8.4.0 cited