On Thu, Dec 2, 2021 at 9:35 AM Dilip Kumar <dilipbalaut@xxxxxxxxx> wrote: > I think there is no such view or anything which tells about which > backend or transaction has more than 64 sub transaction. But if we > are ready to modify the code then we can LOG that information in > GetNewTransactionId(), when first time we are marking it overflown. > if (nxids < PGPROC_MAX_CACHED_SUBXIDS) > { > MyProc->subxids.xids[nxids] = xid; > pg_write_barrier(); > MyProc->subxidStatus.count = substat->count = nxids + 1; > } > else > { > MyProc->subxidStatus.overflowed = substat->overflowed = true; > <-- we can log or put breakpoint here and identify which statement is > creating oeverflow--> > } > > IMHO, it is good to LOG such information if we are not already logging > this anywhere. > I have prepared a small patch to log this information. -- Regards, Dilip Kumar EnterpriseDB: http://www.enterprisedb.com
From 83aa6b7afbe50c1b2f4404f68c3f1a08bd16f7e8 Mon Sep 17 00:00:00 2001 From: Dilip Kumar <dilipkumar@localhost.localdomain> Date: Fri, 3 Dec 2021 14:28:41 +0530 Subject: [PATCH] LOG subxid cache overflow message --- src/backend/access/transam/varsup.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/varsup.c b/src/backend/access/transam/varsup.c index a6e98e7..4877aaa 100644 --- a/src/backend/access/transam/varsup.c +++ b/src/backend/access/transam/varsup.c @@ -245,8 +245,13 @@ GetNewTransactionId(bool isSubXact) pg_write_barrier(); MyProc->subxidStatus.count = substat->count = nxids + 1; } - else + else if (!substat->overflowed) + { + ereport(LOG, + (errmsg("subxid cache for top transaction %u, overflowed", + MyProc->xid))); MyProc->subxidStatus.overflowed = substat->overflowed = true; + } } LWLockRelease(XidGenLock); -- 1.8.3.1