On Tue, Mar 12, 2024 at 02:10:59PM +0200, Alexander Korotkov wrote: > I'm going to push this if no objections.
Commit e85662d wrote: > --- a/src/backend/storage/ipc/procarray.c > +++ b/src/backend/storage/ipc/procarray.c > @@ -2740,6 +2741,8 @@ GetRunningTransactionData(void) > */ > for (index = 0; index < arrayP->numProcs; index++) > { > + int pgprocno = arrayP->pgprocnos[index]; > + PGPROC *proc = &allProcs[pgprocno]; > TransactionId xid; > > /* Fetch xid just once - see GetNewTransactionId */ > @@ -2760,6 +2763,13 @@ GetRunningTransactionData(void) > if (TransactionIdPrecedes(xid, oldestRunningXid)) > oldestRunningXid = xid; > > + /* > + * Also, update the oldest running xid within the current > database. > + */ > + if (proc->databaseId == MyDatabaseId && > + TransactionIdPrecedes(xid, oldestRunningXid)) > + oldestDatabaseRunningXid = xid; Shouldn't that be s/oldestRunningXid/oldestDatabaseRunningXid/? While this isn't a hot path, I likely would test TransactionIdPrecedes() before fetching pgprocno and PGPROC, to reduce wasted cache misses.