From f3dd1426ce5b0efbb8819f0ea2ce1933b26e0ff2 Mon Sep 17 00:00:00 2001 From: Ashutosh Sharma Date: Wed, 7 Oct 2026 06:39:02 +0000 Subject: [PATCH] Reduce logging during prepared transaction recovery Logging every prepared transaction at LOG level can produce a large amount of output and delay the end of recovery when many prepared transactions remain unresolved. Keep transaction-level details available at DEBUG1. Emit one LOG message reporting the number of successfully recovered transactions. --- src/backend/access/transam/twophase.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index 48e478a4ecb..3f735909102 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -2091,6 +2091,7 @@ void RecoverPreparedTransactions(void) { int i; + int recovered_xacts = 0; LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE); for (i = 0; i < TwoPhaseState->numPrepXacts; i++) @@ -2118,7 +2119,7 @@ RecoverPreparedTransactions(void) if (buf == NULL) continue; - ereport(LOG, + ereport(DEBUG1, (errmsg("recovering prepared transaction %u of epoch %u from shared memory", XidFromFullTransactionId(gxact->fxid), EpochFromFullTransactionId(gxact->fxid)))); @@ -2173,11 +2174,19 @@ RecoverPreparedTransactions(void) PostPrepare_Twophase(); pfree(buf); + recovered_xacts++; LWLockAcquire(TwoPhaseStateLock, LW_EXCLUSIVE); } LWLockRelease(TwoPhaseStateLock); + + if (recovered_xacts > 0) + ereport(LOG, + (errmsg_plural("recovered %d prepared transaction", + "recovered %d prepared transactions", + recovered_xacts, + recovered_xacts))); } /* -- 2.43.0