Re: [Proposal] Expose internal MultiXact member count function for efficient monitoring
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Naga Appani <nagnrik@gmail.com>
Cc: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>, Kirill Reshke <reshkekirill@gmail.com>, pgsql-hackers@postgresql.org
Date: 2025-08-08T00:35:52Z
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 →
-
Add pg_get_multixact_stats()
- 97b101776ce2 19 (unreleased) landed
-
Add MultiXactOffsetStorageSize() to multixact_internal.h
- 0e3ad4b96aed 19 (unreleased) landed
-
Change GetMultiXactInfo() to return the next multixact offset
- 9cf746a453c1 19 (unreleased) landed
-
Widen MultiXactOffset to 64 bits
- bd8d9c9bdfa0 19 (unreleased) cited
-
Refactor ReadMultiXactCounts() into GetMultiXactInfo()
- a977e419ee6e 19 (unreleased) landed
-
Move SQL-callable code related to multixacts into its own file
- df9133fa6384 19 (unreleased) landed
-
Split func.sgml into more manageable pieces
- 4e23c9ef65ac 19 (unreleased) cited
On Mon, Aug 04, 2025 at 04:51:30PM -0500, Naga Appani wrote: > The rest of the patch remains the same as v2, which incorporated > feedback from Ashutosh and Michael (see my previous email for > details). > > Please find v3 attached. I am reading again what you have here, and I really think that we should move the SQL function parts of multixact.c into their own new file, exposing ReadMultiXactCounts() in multixact.h, because I also suspect that this can become really useful for extensions that aim at doing things similar to your proposal in terms of data monitoring for autovacuum wraparound. This means two refactoring patches: - One to expose the new routine in multixact.h. - One to move the existing SQL code to its new file. ReadMultiXactCounts() is also incorrectly named with your proposal to expose oldestMultiXactId in the information returned to the caller, where the key point is to make sure that the information retrieved is consistent across a single LWLock acquisition. So perhaps this should be named GetMultiXactInformation() or something similar? The top of ReadMultiXactCounts() (or whatever its new name) should also document the information returned across a single call. It looks inconsistent to return oldestMultiXactId if the oldestOffsetKnown is false. What about oldestOffset itself? Should it be returned for consistency with the counts and oldestMultiXactId? -- Michael