From 97707510215456cf8db0f720b1c9a96e6f4dc073 Mon Sep 17 00:00:00 2001 From: Matthias van de Meent 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