On 20/03/2026 13:55, Andrey Borodin wrote:
On 19 Mar 2026, at 23:11, Heikki Linnakangas <[email protected]> wrote:
I think a better fix is to accept that our tracking is a little
imprecise and use SimpleLruDoesPhysicalPageExist() to check if the
page exists. I suspect that's too expensive to do on every
RecordNewMultiXact() call that crosses a page, but perhaps we
could do it once at StartupMultiXact().
Or perhaps track last-zeroed page separately from
latest_page_number, and if we haven't seen any
XLOG_MULTIXACT_ZERO_OFF_PAGE records yet after startup, call
SimpleLruDoesPhysicalPageExist() to determine if initialization is
needed. Attached patch does that.
SimpleLruDoesPhysicalPageExist() does not detect recently zeroed
pages via buffers, because it goes directly to FS. I tried this
approach when implementing deadlock fix, it did not work for me.
Hmm, after startup, before we have zeroed any pages, it still works
though. So I think my patch works, but it means that tracking the latest
page we have zeroed is not merely an optimization to avoid excessive
SimpleLruDoesPhysicalPageExist() calls, it's needed for correctness.
Need to adjust the comments for that.
- Heikki