Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 407cb6c

Browse files
committed
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 980ae17, 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
1 parent 348233c commit 407cb6c

File tree

1 file changed

+0
-4
lines changed

1 file changed

+0
-4
lines changed

src/backend/access/heap/vacuumlazy.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1330,11 +1330,7 @@ lazy_scan_skip(LVRelState *vacrel, Buffer *vmbuffer, BlockNumber next_block,
13301330

13311331
/* DISABLE_PAGE_SKIPPING makes all skipping unsafe */
13321332
if (!vacrel->skipwithvm)
1333-
{
1334-
/* Caller shouldn't rely on all_visible_according_to_vm */
1335-
*next_unskippable_allvis = false;
13361333
break;
1337-
}
13381334

13391335
/*
13401336
* Aggressive VACUUM caller can't skip pages just because they are

0 commit comments

Comments
 (0)