Re: eliminate xl_heap_visible to reduce WAL (and eventually set VM on-access)

From: Melanie Plageman <melanieplageman(at)gmail(dot)com>
To: Andrey Borodin <x4mmm(at)yandex-team(dot)ru>
Cc: PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Andres Freund <andres(at)anarazel(dot)de>, Robert Haas <robertmhaas(at)gmail(dot)com>
Subject: Re: eliminate xl_heap_visible to reduce WAL (and eventually set VM on-access)
Date: 2025-08-01 21:36:19
Message-ID: CAAKRu_bGCgUuhmy1Mzkw3yCmbGcjNQAjV=OmjuW6hz90PuXKWA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Thu, Jul 31, 2025 at 6:58 PM Melanie Plageman
<melanieplageman(at)gmail(dot)com> wrote:
>
> The patch "Set-pd_prune_xid-on-insert.txt" can be applied as the last
> patch in the set. It sets pd_prune_xid on insert (so pages filled by
> COPY or insert can also be set all-visible in the VM before they are
> vacuumed). I gave it a .txt extension because it currently fails
> 035_standby_logical_decoding due to a recovery conflict. I need to
> investigate more to see if this is a bug in my patch set or elsewhere
> in Postgres.

I figured out that if we set the VM on-access, we need to enable
hot_standby_feedback in more places in 035_standby_logical_decoding.pl
to avoid recovery conflicts. I've done that in the attached updated
version 6. There are a few other issues in
035_standby_logical_decoding.pl that I reported here [1]. With these
changes, setting pd_prune_xid on insert passes tests. Whether or not
we want to do it (and what the heuristic should be for deciding when
to do it) is another question.

- Melanie

[1] https://www.postgresql.org/message-id/flat/CAAKRu_YO2mEm%3DZWZKPjTMU%3DgW5Y83_KMi_1cr51JwavH0ctd7w%40mail.gmail.com

Attachment Content-Type Size
v6-0001-Eliminate-xl_heap_visible-in-COPY-FREEZE.patch text/x-patch 10.8 KB
v6-0003-Eliminate-xl_heap_visible-from-vacuum-phase-III.patch text/x-patch 24.4 KB
v6-0005-Combine-lazy_scan_prune-VM-corruption-cases.patch text/x-patch 7.1 KB
v6-0002-Make-heap_page_is_all_visible-independent-of-LVRe.patch text/x-patch 5.1 KB
v6-0004-Use-xl_heap_prune-record-for-setting-empty-pages-.patch text/x-patch 5.8 KB
v6-0007-Find-and-fix-VM-corruption-in-heap_page_prune_and.patch text/x-patch 11.7 KB
v6-0008-Keep-all_frozen-updated-too-in-heap_page_prune_an.patch text/x-patch 3.0 KB
v6-0006-Combine-vacuum-phase-I-VM-update-cases.patch text/x-patch 5.8 KB
v6-0009-Update-VM-in-pruneheap.c.patch text/x-patch 12.7 KB
v6-0010-Eliminate-xl_heap_visible-from-vacuum-phase-I-pru.patch text/x-patch 28.5 KB
v6-0013-Rename-GlobalVisTestIsRemovableXid-to-GlobalVisXi.patch text/x-patch 7.1 KB
v6-0014-Use-GlobalVisState-to-determine-page-level-visibi.patch text/x-patch 10.5 KB
v6-0012-Remove-xl_heap_visible-entirely.patch text/x-patch 24.3 KB
v6-0011-Rename-PruneState.freeze-to-attempt_freeze.patch text/x-patch 4.1 KB
v6-0015-Inline-TransactionIdFollows-Precedes.patch text/x-patch 4.9 KB
v6-0017-Allow-on-access-pruning-to-set-pages-all-visible.patch text/x-patch 27.4 KB
v6-0019-Reorder-heap_page_prune_and_freeze-parameters.patch text/x-patch 5.8 KB
v6-0016-Unset-all-visible-sooner-if-not-freezing.patch text/x-patch 2.5 KB
v6-0018-Add-helper-functions-to-heap_page_prune_and_freez.patch text/x-patch 18.9 KB
v6-0020-Set-pd_prune_xid-on-insert.patch text/x-patch 4.4 KB

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Jelte Fennema-Nio 2025-08-01 22:15:32 Re: BackendKeyData is mandatory?
Previous Message Melanie Plageman 2025-08-01 20:57:50 Re: Missing import in 035_standby_logical_decoding.pl