mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Refine the definition of page-level freezing.
Improve comments added by commit1de58df4
which describe the lazy_scan_prune "freeze the page" path. These newly revised comments are based on suggestions from Jeff Davis. In passing, remove nearby visibility_cutoff_xid comments left over from commit6daeeb1f
. Author: Peter Geoghegan <pg@bowt.ie> Reviewed-By: Jeff Davis <pgsql@j-davis.com> Discussion: https://postgr.es/m/ebc857107fe3edd422ef8a65191ca4a8da568b9b.camel@j-davis.com
This commit is contained in:
@ -1788,13 +1788,13 @@ retry:
|
||||
if (tuples_frozen == 0)
|
||||
{
|
||||
/*
|
||||
* We're freezing all eligible tuples on the page, but have no
|
||||
* freeze plans to execute. This is structured as a case where
|
||||
* the page is nominally frozen so that we set pages all-frozen
|
||||
* whenever no freeze plans need to be executed to make it safe.
|
||||
* If this was handled via "no freeze" processing instead then
|
||||
* VACUUM would senselessly waste certain opportunities to set
|
||||
* pages all-frozen (not just all-visible) at no added cost.
|
||||
* We have no freeze plans to execute, so there's no added cost
|
||||
* from following the freeze path. That's why it was chosen.
|
||||
* This is important in the case where the page only contains
|
||||
* totally frozen tuples at this point (perhaps only following
|
||||
* pruning). Such pages can be marked all-frozen in the VM by our
|
||||
* caller, even though none of its tuples were newly frozen here
|
||||
* (note that the "no freeze" path never sets pages all-frozen).
|
||||
*
|
||||
* We never increment the frozen_pages instrumentation counter
|
||||
* here, since it only counts pages with newly frozen tuples
|
||||
@ -1859,12 +1859,6 @@ retry:
|
||||
if (!heap_page_is_all_visible(vacrel, buf, &cutoff, &all_frozen))
|
||||
Assert(false);
|
||||
|
||||
/*
|
||||
* It's possible that we froze tuples and made the page's XID cutoff
|
||||
* (for recovery conflict purposes) FrozenTransactionId. This is okay
|
||||
* because visibility_cutoff_xid will be logged by our caller in a
|
||||
* moment.
|
||||
*/
|
||||
Assert(!TransactionIdIsValid(cutoff) ||
|
||||
cutoff == prunestate->visibility_cutoff_xid);
|
||||
}
|
||||
|
Reference in New Issue
Block a user