Re: POC: make mxidoff 64 bits
Alexander Korotkov <aekorotkov@gmail.com>
From: Alexander Korotkov <aekorotkov@gmail.com>
To: Maxim Orlov <orlovmg@gmail.com>
Cc: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>,
wenhui qiu <qiuwenhuifx@gmail.com>, Heikki Linnakangas <hlinnaka@iki.fi>,
Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-09-13T13:34:01Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix partial read handling in pg_upgrade's multixact conversion
- ac94ce8194e5 19 (unreleased) landed
-
Increase timeout in multixid_conversion upgrade test
- bd43940b02b2 19 (unreleased) landed
-
Improve sanity checks on multixid members length
- ecb553ae8211 19 (unreleased) landed
-
Clarify comment on multixid offset wraparound check
- 170361d7b869 14.21 landed
- b0b52b7123ae 15.16 landed
- 7d42e2367c6b 16.12 landed
- cd1a887fe9bf 17.8 landed
- 3fbad030a24d 18.2 landed
- 366dcdaf5779 19 (unreleased) landed
-
Never store 0 as the nextMXact
- 87a350e1f284 19 (unreleased) landed
-
Add runtime checks for bogus multixact offsets
- d4b7bde4183b 19 (unreleased) landed
-
Widen MultiXactOffset to 64 bits
- bd8d9c9bdfa0 19 (unreleased) landed
-
Move pg_multixact SLRU page format definitions to a separate header
- bb3b1c4f6462 19 (unreleased) landed
-
Convert confusing macros in multixact.c to static inline functions
- 0099b9408e8c 17.0 landed
-
Index SLRUs by 64-bit integers rather than by 32-bit integers
- 4ed8f0913bfd 17.0 cited
-
Cope with possible failure of the oldest MultiXact to exist.
- b6a3444fa635 9.4.4 cited
Hello Maxim! On Thu, Sep 11, 2025 at 11:58 AM Maxim Orlov <orlovmg@gmail.com> wrote: > > Once again, @ 8191e0c16a Thank you for your work on this subject. Multixact members can really grow much faster than multixact offsets, and avoiding wraparound just here might make sense. At the same time, making multixact offsets 64-bit is local and doesn't require changing the tuple xmin/xmax interpretation. I went through the patchset. The shape does not look bad, but I have a concern about the size of the multixact offsets. As I understand, this patchset grows multixact offsets twice; each multixact offset grows from 32 bits to 64 bits. This seems quite a price for avoiding the Multixact members' wraparound. We can try to squeeze multixact offsets given it's ascending sequence each time increased by a multixact size. But how many members can a multixact contain at maximum? Looking at MultiXactIdExpand(), I get that we're keeping locks from in-progress transactions, and committed non-lock transactions (I guess the latter could be only one). The number of transactions running by backends should fit MAX_BACKENDS (2^18 - 1), and the number of prepared transactions should also fit MAX_BACKENDS. So, I guess we can cap the total number of one multixact members to 2^24. Therefore, we can change from each 8 of 32-bit multixact offsets (takes 32-bytes) to one 64-bit offset + 7 of 24-bit offset increments (takes 29-bytes). The actual multixact offsets can be calculated at the fly, overhead shouldn't be significant. What do you think? ------ Regards, Alexander Korotkov Supabase