Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1trw4x-00C71i-Bi for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 09:39:15 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1trw4v-00CHuO-Vr for pgsql-hackers@arkaria.postgresql.org; Tue, 11 Mar 2025 09:39:13 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1trrxv-007ikj-Nq for pgsql-hackers@lists.postgresql.org; Tue, 11 Mar 2025 05:15:43 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1trrxr-002AV5-30 for pgsql-hackers@postgresql.org; Tue, 11 Mar 2025 05:15:43 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-5dc89df7eccso8447883a12.3 for ; Mon, 10 Mar 2025 22:15:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741670139; x=1742274939; darn=postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=bA/FcMnQyNrYATPguemL0ZOrI2o1ch88ukGsyD28l50=; b=WV4VCgQrigVLLPlpWyXsIuIx0jynzVMMZKC0nv0Amvj49QrLLGupPo1DLys2SdVE3j kNzMkS2oe13KE/OR00h1BqssfsY/UYpKHJqzCfXSlwEFSNkoTm7Wv+T7puy0QgAvAWY+ hjv0l0ZyZFPScFApwZoLzJx+gpQ4Sfl20ivZ1zb+eDjZe81+wbr/LXUsQEAvxm+KHiFf U/yVdCeFBBaR2zUFGxkqN3q6KAS8AtqVqDfzik9eMFDcShHwfxWoJqD1D3gzL5Gn0iqP T19uj3Kqv8VVVAU5oD9TQ3zu02OSGY6EFJ1moWPPck5kklTNIzU639GM/F2G4oEpMGew SbMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741670139; x=1742274939; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=bA/FcMnQyNrYATPguemL0ZOrI2o1ch88ukGsyD28l50=; b=bmqmScqD9aO4gmH7byoBrD8eTrgk5z0jfTgCCWevleTml1tlxz4vCKkXxdRi5Rj5+s mtvrH5lp1yDOmUIsAVCeWQ4qSvhFNybJ704gdIRo0Lt04eT2UlY6f8TKTLiugvxbUrlc 6AAY59ZOQAXucN72RqrJmFNRK4NLhQ8geC5NAmHeN9O99CIiQ8M814Nl5GqJ092NhStX +dYhVe1Y96paNaCyLJ+/a5x5XGlSVDMCqtGZOoLXFlf0p2piUogjodUeVbhGAb3A8xE1 0OF+ZxYgZ4BzJXbBvy6hfPxmsXS8VrbV3Sh+ghjTMzc/LTSNFJ1vTToBeG8+Ot08aCnr GHwQ== X-Gm-Message-State: AOJu0YyqDYSuA1IfBDRwAX7wpUI/o8QzdVmrErAu0whudAQsguRyGOsl FOC1CKx8Db+/Bz/0S46mrbQcJaAHNnIWrX3gDiJ++LA4TjkFl6SteCPMu0JGv/OAAtV8m9kDKeG zysDyOBYo/DnFbhtXDrOBkacoPeUuIQLfZiM4AA== X-Gm-Gg: ASbGncuVltbrmyqXI7LNWFVHzqNTOI/rNFGZznM6Z8eOQK9FESqfcdJakrW8aA0go+a nDcRhiiFdViAiTIkIwm/B5eBEh7j/k8k24KhiwbCnP6mUbK8ouMVDNGfwZTnCnOU6+YTFbFDXjO d1LdDTGw44AoH757aDO0aSC61I2BLqKSug X-Google-Smtp-Source: AGHT+IFUCYPO7bH5GLmQD+5k61zmjpEheYB0GNGPw1CotojKhUqFA/FDWe79s9zFZKRwI2UWNYMD0ZTmZhvoJ03EtsY= X-Received: by 2002:a17:907:1c1f:b0:abf:72c1:6e6c with SMTP id a640c23a62f3a-ac252ba1906mr1915926966b.45.1741670138988; Mon, 10 Mar 2025 22:15:38 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Naga Appani Date: Tue, 11 Mar 2025 00:15:28 -0500 X-Gm-Features: AQ5f1Jrg0ZFTQacfzAsl-9O0MNPSjN7JOuw_X7odmY5UgJD6wVzJj_k0LZOlRoI Message-ID: Subject: Re: [Proposal] Expose internal MultiXact member count function for efficient monitoring To: pgsql-hackers@postgresql.org Content-Type: multipart/alternative; boundary="000000000000f3559e06300a2da7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f3559e06300a2da7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Mar 10, 2025 at 10:43=E2=80=AFAM Naga Appani wr= ote: > Hi, > > I would like to propose exposing an internal PostgreSQL function called > ReadMultiXactCounts() to allow for efficient monitoring of MultiXact > member usage. This function provides an accurate, real-time view of > MultiXact activity by directly retrieving the actual member count, rather > than relying on storage-based calculations. > > *Current Challenges: *The existing approach we are currently using to > estimate MultiXact member usage has several drawbacks: > > - *Filesystem scanning overhead: *These functions recursively scan the > pg_multixact directory, iterating over potentially thousands or > millions of files, and retrieving file sizes using stat() calls, which > introduces significant I/O overhead. > - *Potential performance bottleneck:* On systems with high transaction > throughput generating large numbers of MultiXact members, the > filesystem-based approach scales poorly due to the latency of stat() c= alls, > especially on network-based filesystems like RDS/Aurora. > - *Not a real-time or memory-efficient solution:* The current approach > does not provide a direct, in-memory view of MultiXact activity. > > *Proposed Solution*The internal ReadMultiXactCounts() function, > implemented in multixact.c, directly calculates the number of MultiXact > members by reading live state from shared memory. This approach avoids th= e > performance issues of the current filesystem-based estimation methods. > ................ > ............... > My apologies for re-posting. This is my first time writing to the hackers list, and I accidentally used HTML formatting. Below is the original request in plain text: ***************************************************************************= ***************************************************************************= ******** I would like to propose exposing an internal PostgreSQL function called ReadMultiXactCounts()[1] to allow for efficient monitoring of MultiXact member usage. This function provides an accurate, real-time view of MultiXact activity by directly retrieving the actual member count, rather than relying on storage-based calculations. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Current Challenges =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The existing approach we are currently using to estimate MultiXact member usage has several drawbacks: - Filesystem scanning overhead: These functions recursively scan the pg_multixact directory, iterating over potentially thousands or millions of files, and retrieving file sizes using stat() calls, which introduces significant I/O overhead. - Potential performance bottleneck: On systems with high transaction throughput generating large numbers of MultiXact members, the filesystem-based approach scales poorly due to the latency of stat() calls, especially on network-based filesystems like RDS/Aurora. - Not a real-time or memory-efficient solution: The current approach does not provide a direct, in-memory view of MultiXact activity. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Proposal =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The internal ReadMultiXactCounts() function, implemented in multixact.c, directly calculates the number of MultiXact members by reading live state from shared memory. This approach avoids the performance issues of the current filesystem-based estimation methods. By exposing ReadMultiXactCounts() for external use, we can provide PostgreSQL users with an efficient way to monitor MultiXact member usage. This could be particularly useful for integrating with tools like Amazon RDS Performance Insights and Amazon CloudWatch to provide enhanced database insights and proactive managed monitoring for users. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Performance comparison =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D The performance comparison between the current and proposed approaches shows a significant improvement, with the proposed solution taking only a fraction of a millisecond to retrieve the MultiXact member count, compared to tens or hundreds of milliseconds for the current filesystem-based approach. And as more members are generated, the gap widens. Following is the comparison of performance between calculating storage of MultiXact members directory and retrieving the count of members. Implementation | Used size | MultiXact members ----------------------------------------------------+-------------+--------= ---------- EC2 community (RDS version of pg_ls_multixactdir) | 8642 MB | 1.8 billion Linux du command | 8642 MB | 1.8 billion Proposal (ReadMultiXactCounts) | 8642 MB | 1.8 billion =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Sample runs =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Using "du -h" -------------------- postgres=3D# \! time du -h /rdsdbdata/db/17.4/data/pg_multixact/members 13G /rdsdbdata/db/17.4/data/pg_multixact/members real 0m0.285s <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D time taken user 0m0.050s <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D time taken sys 0m0.140s Using RDS's pg_ls_multixactdir (): ------------------------------------------------------------ postgres=3D# SELECT pg_size_pretty(coalesce(sum(size), 0)) AS members_size FROM pg_ls_multixactdir () WHERE name LIKE 'pg_multixact/members%'; members_size -------------- 13 GB (1 row) Time: 226.533 ms <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D time taken Using proposed function: ---------------------------------------- postgres=3D# SELECT to_char(pg_get_multixact_members_count(), '999,999,999,999') AS members_count; members_count ------------------ 2,745,823,171 (1 row) Time: 0.142 ms <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D time taken =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D I believe exposing ReadMultiXactCounts() would be a valuable addition to the PostgreSQL ecosystem, providing users with a more reliable and efficient way to monitor MultiXact usage. Appreciate your feedback or discussion on this proposal. Please let me know if this approach is acceptable, so I=E2=80=99ll go ahead= and submit a patch. Thank you! References: [1] https://github.com/postgres/postgres/blob/master/src/backend/access/transam= /multixact.c#L2925-L2948 > > Thank you! > > Best regards, > Naga Appani > Postgres Database Engineer > Amazon Web Services > --000000000000f3559e06300a2da7 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Mon, Mar 10,= 2025 at 10:43=E2=80=AFAM Naga Appani <nagnrik@gmail.com> wrote:
Hi,

I would like to propose e= xposing an internal PostgreSQL function called=C2=A0ReadMultiXactCoun= ts()=C2=A0to allow for efficient monitoring of MultiXact member usag= e. This function provides an accurate, real-time view of MultiXact activity= by directly retrieving the actual member count, rather than relying on sto= rage-based calculations.

Current Challenges:=C2=A0The existing approach we are currently using to estimate MultiXact member = usage has several drawbacks:
  • Filesystem scanning overhead:=C2= =A0These functions recursively scan the=C2=A0pg_multixact= =C2=A0directory, iterating over potentially thousands or millions of files,= and retrieving file sizes using=C2=A0stat()=C2=A0calls, which= introduces significant I/O overhead.
  • Potential performance bott= leneck:=C2=A0On systems with high transaction throughput generating lar= ge numbers of MultiXact members, the filesystem-based approach scales poorl= y due to the latency of=C2=A0stat()=C2=A0calls, especially on = network-based filesystems like RDS/Aurora.
  • Not a real-time or me= mory-efficient solution:=C2=A0The current approach does not provide a d= irect, in-memory view of MultiXact activity.
Proposed Solution<= /b>The internal=C2=A0ReadMultiXactCounts()=C2=A0function, impl= emented in=C2=A0multixact.c, directly calculates the number of= MultiXact members by reading live state from shared memory. This approach = avoids the performance issues of the current filesystem-based estimation me= thods.
................
...............


My apologies for re-posting. T= his is my first time writing to the hackers list, and I accidentally used H= TML formatting. Below is the original request in plain text:

*******= ***************************************************************************= ***************************************************************************= *
I would like to propose exposing an internal PostgreSQL function calle= d ReadMultiXactCounts()[1] to allow for efficient monitoring of MultiXact m= ember usage. This function provides an accurate, real-time view of MultiXac= t activity by directly retrieving the actual member count, rather than rely= ing on storage-based calculations.

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D
Current Challenges
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D
The existing approach we are currently using to estimate= MultiXact member usage has several drawbacks:
- Filesystem scanning ove= rhead: These functions recursively scan the pg_multixact directory, iterati= ng over potentially thousands or millions of files, and retrieving file siz= es using stat() calls, which introduces significant I/O overhead.
- Pote= ntial performance bottleneck: On systems with high transaction throughput g= enerating large numbers of MultiXact members, the filesystem-based approach= scales poorly due to the latency of stat() calls, especially on network-ba= sed filesystems like RDS/Aurora.
- Not a real-time or memory-efficient s= olution: The current approach does not provide a direct, in-memory view of = MultiXact activity.

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D
Proposal
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
T= he internal ReadMultiXactCounts() function, implemented in multixact.c, dir= ectly calculates the number of MultiXact members by reading live state from= shared memory. This approach avoids the performance issues of the current = filesystem-based estimation methods.

By exposing ReadMultiXactCounts= () for external use, we can provide PostgreSQL users with an efficient way = to monitor MultiXact member usage. This could be particularly useful for in= tegrating with tools like Amazon RDS Performance Insights and Amazon CloudW= atch to provide enhanced database insights and proactive managed monitoring= for users.

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D
Performance comparison
=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
The performance comp= arison between the current and proposed approaches shows a significant impr= ovement, with the proposed solution taking only a fraction of a millisecond= to retrieve the MultiXact member count, compared to tens or hundreds of mi= lliseconds for the current filesystem-based approach.=C2=A0 And as more mem= bers are generated, the gap widens.

Following is the comparison of p= erformance between calculating storage of MultiXact members directory and r= etrieving the count of members.

Implementation =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 | =C2=A0Used size =C2=A0| MultiXact = members
----------------------------------------------------+-----------= --+------------------
EC2 community (RDS version of pg_ls_multixactdir) = =C2=A0 | =C2=A0 8642 MB =C2=A0| 1.8 billion
Linux du command =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0 8642 MB =C2=A0| 1.8 billi= on
Proposal (ReadMultiXactCounts) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0| =C2=A0 8642 MB =C2=A0| 1.8 billion<= br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Sample runs=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Using "du= -h"
--------------------
postgres=3D# \! time du -h /rdsdbdata/= db/17.4/data/pg_multixact/members
13G =C2=A0 =C2=A0 /rdsdbdata/db/17.4/d= ata/pg_multixact/members

real =C2=A0 =C2=A00m0.285s =C2=A0 =C2=A0<= ;=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D =C2=A0time taken
user =C2=A0 =C2=A00m0.050s =C2=A0 =C2= =A0<=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D =C2=A0time taken
sys =C2=A0 =C2=A0 0m0.140s
Using RDS's =C2=A0pg_ls_multixactdir ():
--------------------------= ----------------------------------
postgres=3D# SELECT
=C2=A0 =C2=A0 = pg_size_pretty(coalesce(sum(size), 0)) AS members_size
FROM
=C2=A0 = =C2=A0 pg_ls_multixactdir ()
WHERE
=C2=A0 =C2=A0 name LIKE 'pg_mu= ltixact/members%';
=C2=A0members_size
--------------
=C2=A013 = GB
(1 row)

Time: 226.533 ms <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =C2=A0time taken
=
Using proposed function:
----------------------------------------postgres=3D# SELECT to_char(pg_get_multixact_members_count(), '999,999= ,999,999') AS members_count;
=C2=A0 members_count
---------------= ---
=C2=A0 =C2=A0 2,745,823,171
(1 row)

Time: 0.142 ms =C2=A0 = <=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D =C2=A0time taken
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

<= /div>
I believe exposing Re= adMultiXactCounts() would be a valuable addition to the PostgreSQL ecosyste= m, providing users with a more reliable and efficient way to monitor MultiX= act usage. Appreciate your feedback or discussion on this proposal.

= Please let me know if this approach is acceptable, so I=E2=80=99ll go ahead= and submit a patch.

Thank you!

References:
<= br>
Thank you!

Best regards,=C2=A0
Na= ga Appani
Postgres Database Engineer
Amazon Web Service= s
--000000000000f3559e06300a2da7--