Re: collect_corrupt_items_vacuum.patch

Noah Misch <noah@leadboat.com>

From: Noah Misch <noah@leadboat.com>
To: Alexander Korotkov <aekorotkov@gmail.com>
Cc: Dmitry Koval <d.koval@postgrespro.ru>, pgsql-hackers@lists.postgresql.org
Date: 2024-06-30T23:18:16Z
Lists: pgsql-hackers
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.



Commits

  1. Fix GetStrictOldestNonRemovableTransactionId() on standby

  2. Fix typo in GetRunningTransactionData()

  3. Optimize memory access in GetRunningTransactionData()

  4. Fix false reports in pg_visibility

  5. Fix indentation