>Just a note here. After examining the core dump I did notice something.
>While in XidInMVCCSnapshot call the snapshot->suboverflowed is set true
>although subxip == NULL and subxcnt == 0. As far as I understand,
>snapshot->suboverflowed is set true in the GetRunningTransactionData
>call.
>And then I decided to put elog around CurrentRunningXacts->subxcnt's
>assigment.
>diff --git a/src/backend/storage/ipc/procarray.c
>b/src/backend/storage/ipc/procarray.c
>index 42a89fc5dc9..3d2db02f580 100644
>--- a/src/backend/storage/ipc/procarray.c
>+++ b/src/backend/storage/ipc/procarray.c
>@@ -2781,6 +2781,9 @@ GetRunningTransactionData(void)
> * increases if slots do.
> */
>+ if (suboverflowed)
>+ elog(WARNING, " >>> CurrentRunningXacts->subxid_overflow
>is true");
>+
> CurrentRunningXacts->xcnt = count - subcount;
> CurrentRunningXacts->subxcnt = subcount;
> CurrentRunningXacts->subxid_overflow = suboverflowed;
>... and did get a bunch of messages. I.e. subxid_overflow is set true
>very often.
>I've increased the value of PGPROC_MAX_CACHED_SUBXIDS. Once it becomes
>more than 120 there are no messages and no failed assertions are
>provided any more.
Please, avoid using decimal based values.
128 is multiple of 64.
See :
https://github.com/trevstanhope/scratch/blob/master/C/docs/O%27Reilly%20-%20Practical%20C%20Programming%203rd%20Edition.pdf
15.6.1 The Power of Powers of 2
regards,
Ranier Vilela