mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-30 13:01:20 +02:00
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
This commit is contained in:
parent
348233cb12
commit
407cb6c658
@ -1330,11 +1330,7 @@ lazy_scan_skip(LVRelState *vacrel, Buffer *vmbuffer, BlockNumber next_block,
|
||||
|
||||
/* DISABLE_PAGE_SKIPPING makes all skipping unsafe */
|
||||
if (!vacrel->skipwithvm)
|
||||
{
|
||||
/* Caller shouldn't rely on all_visible_according_to_vm */
|
||||
*next_unskippable_allvis = false;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Aggressive VACUUM caller can't skip pages just because they are
|
||||
|
Loading…
Reference in New Issue
Block a user