Re: New strategies for freezing, advancing relfrozenxid early
Peter Geoghegan <pg@bowt.ie>
From: Peter Geoghegan <pg@bowt.ie>
To: Dilip Kumar <dilipbalaut@gmail.com>
Cc: Jeff Davis <pgsql@j-davis.com>,
Matthias van de Meent <boekewurm+postgres@gmail.com>, John Naylor <john.naylor@enterprisedb.com>,
Andres Freund <andres@anarazel.de>, Justin Pryzby <pryzby@telsasoft.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2023-01-17T04:35:05Z
Lists: pgsql-hackers
On Mon, Jan 16, 2023 at 8:13 PM Dilip Kumar <dilipbalaut@gmail.com> wrote: > I think that it makes sense to keep 'vacuum_freeze_strategy_threshold' > strictly for freezing. But the point is that the eager scanning > strategy is driven by table freezing needs of the table (tableagefrac) > that make sense, but if we have selected the eager freezing based on > the table age and its freezing need then why don't we force the eager > freezing as well if we have selected eager scanning, after all the > eager scanning is selected for satisfying the freezing need. Don't think of eager scanning as the new name for aggressive mode -- it's a fairly different concept, because we care about costs now. Eager scanning can be chosen just because it's very cheap relative to the alternative of lazy scanning, even when relfrozenxid is still very recent. (This kind of behavior isn't really new [1], but the exact implementation from the patch is new.) Tables such as pgbench_branches and pgbench_tellers will reliably use eager scanning strategy, no matter how any GUC has been set -- just because the added cost is always zero (relative to lazy scanning). It really doesn't matter how far along tableagefrac here, ever. These same tables will never use eager freezing strategy, unless the vacuum_freeze_strategy_threshold GUC is misconfigured. (This is another example of how scanning strategy and freezing strategy may differ for the same table.) You do have a good point, though. I think that I know what you mean. Note that antiwraparound autovacuums (or VACUUMs of tables very near to that point) *will* always use both the eager freezing strategy and the eager scanning strategy -- which is probably close to what you meant. The important point is that there can be more than one reason to prefer one strategy to another -- and the reasons can be rather different. Occasionally it'll be a combination of two factors together that push things in favor of one strategy over the other -- even though either factor on its own would not have resulted in the same choice. [1] https://wiki.postgresql.org/wiki/Freezing/skipping_strategies_patch:_motivating_examples#Constantly_updated_tables_.28usually_smaller_tables.29 -- Peter Geoghegan
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