pgsql: Set all_visible_according_to_vm correctly with DISABLE_PAGE_SKIP

From: Heikki Linnakangas <heikki(dot)linnakangas(at)iki(dot)fi>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Set all_visible_according_to_vm correctly with DISABLE_PAGE_SKIP
Date: 2024-03-11 09:20:47
Message-ID: E1rjbpv-003D0E-FU@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Set all_visible_according_to_vm correctly with DISABLE_PAGE_SKIPPING

It's important for 'all_visible_according_to_vm' to correctly reflect
whether the VM bit is set or not, even when we are not trusting the VM
to skip pages, because contrary to what the comment said,
lazy_scan_prune() relies on it.

If it's incorrectly set to 'false', when the VM bit is in fact set,
lazy_scan_prune() will try to set the VM bit again and dirty the page
unnecessarily. As a result, if you used DISABLE_PAGE_SKIPPING, all
heap pages were dirtied, even if there were no changes. We would also
fail to clear any VM bits that were set incorrectly.

This was broken in commit 980ae17310, so backpatch to v16.

Backpatch-through: 16
Reviewed-by: Melanie Plageman, Peter Geoghegan
Discussion: https://www.postgresql.org/message-id/3df2b582-dc1c-46b6-99b6-38eddd1b2784@iki.fi

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/407cb6c6589fa2b757c9f2724278ae101749d9f7

Modified Files
--------------
src/backend/access/heap/vacuumlazy.c | 4 ----
1 file changed, 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Nathan Bossart 2024-03-11 15:34:07 pgsql: vacuumdb: Allow specifying objects to process in all databases.
Previous Message Heikki Linnakangas 2024-03-11 07:09:34 pgsql: Don't destroy SMgrRelations at relcache invalidation