From 97707510215456cf8db0f720b1c9a96e6f4dc073 Mon Sep 17 00:00:00 2001
From: Matthias van de Meent <boekewurm+postgres@gmail.com>
Date: Wed, 29 Nov 2023 20:35:22 +0100
Subject: [PATCH v6 3/3] NOCOMMIT: Instrumentation for time spent in
 _brin_end_parallel

---
 src/backend/access/brin/brin.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c
index e7ec7c7b53..119c23cb09 100644
--- a/src/backend/access/brin/brin.c
+++ b/src/backend/access/brin/brin.c
@@ -2482,6 +2482,9 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
 				oldCxt;
 	BrinTuple  *prevbtup = NULL;
 	Size		prevtuplen;
+	instr_time	time_spent;
+
+	INSTR_TIME_SET_ZERO(time_spent);
 
 	/* Shutdown worker processes */
 	WaitForParallelWorkersToFinish(brinleader->pcxt);
@@ -2523,6 +2526,11 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
 	 */
 	while ((btup = tuplesort_getbrintuple(spool->sortstate, &tuplen, true)) != NULL)
 	{
+		instr_time	opr_start;
+		instr_time	opr_end;
+
+		INSTR_TIME_SET_CURRENT(opr_start);
+
 		/* Ranges should be multiples of pages_per_range for the index. */
 		Assert(btup->bt_blkno % brinshared->pagesPerRange == 0);
 
@@ -2579,6 +2587,8 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
 			}
 
 			union_tuples(state->bs_bdesc, memtuple, btup);
+			INSTR_TIME_SET_CURRENT(opr_end);
+			INSTR_TIME_ACCUM_DIFF(time_spent, opr_end, opr_start);
 			continue;
 		}
 		else
@@ -2602,8 +2612,11 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
 				len = prevtuplen;
 			}
 
+			INSTR_TIME_SET_CURRENT(opr_end);
+			INSTR_TIME_ACCUM_DIFF(time_spent, opr_end, opr_start);
 			brin_doinsert(state->bs_irel, state->bs_pagesPerRange, state->bs_rmAccess,
 						  &state->bs_currentInsertBuf, tmp->bt_blkno, tmp, len);
+			INSTR_TIME_SET_CURRENT(opr_start);
 
 			/*
 			 * Reset the per-output-range context. This frees all the memory
@@ -2627,6 +2640,9 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
 			/* continue to insert empty pages before thisblock */
 		}
 
+		INSTR_TIME_SET_CURRENT(opr_end);
+		INSTR_TIME_ACCUM_DIFF(time_spent, opr_end, opr_start);
+
 		/* Fill empty ranges for all ranges missing in the tuplesort. */
 		prevblkno = (prevblkno == InvalidBlockNumber) ? 0 : prevblkno;
 		while (prevblkno + state->bs_pagesPerRange < btup->bt_blkno)
@@ -2698,6 +2714,7 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
 		UnregisterSnapshot(brinleader->snapshot);
 	DestroyParallelContext(brinleader->pcxt);
 	ExitParallelMode();
+	elog(LOG, "Spent %ld nanos on non-IO tasks", INSTR_TIME_GET_NANOSEC(time_spent));
 }
 
 /*
-- 
2.40.1

