Thread

  1. [PATCH v11 2/3] Implements logging for parallel worker usage in utilities

    Benoit Lobréau <benoit.lobreau@dalibo.com> — 2025-01-29T16:10:57Z

    This patch implements logging of parallel worker usage for:
    * the index cleanup and bulkdelete phases of vacuum;
    * btree, brin and gin index builds.
    ---
     src/backend/access/brin/brin.c        |  4 ++++
     src/backend/access/gin/gininsert.c    |  4 ++++
     src/backend/access/nbtree/nbtsort.c   |  4 ++++
     src/backend/commands/vacuumparallel.c | 13 +++++++++++++
     4 files changed, 25 insertions(+)
    
    diff --git a/src/backend/access/brin/brin.c b/src/backend/access/brin/brin.c
    index bdb30752e09..3bb04c117d8 100644
    --- a/src/backend/access/brin/brin.c
    +++ b/src/backend/access/brin/brin.c
    @@ -2568,6 +2568,10 @@ _brin_end_parallel(BrinLeader *brinleader, BrinBuildState *state)
     	/* Shutdown worker processes */
     	WaitForParallelWorkersToFinish(brinleader->pcxt);
     
    +	LogParallelWorkersIfNeeded(log_parallel_workers,
    +							   brinleader->pcxt->nworkers_to_launch,
    +							   brinleader->pcxt->nworkers_launched);
    +
     	/*
     	 * Next, accumulate WAL usage.  (This must wait for the workers to finish,
     	 * or we might get incomplete data.)
    diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c
    index cb9ed3b563c..c752cea8c60 100644
    --- a/src/backend/access/gin/gininsert.c
    +++ b/src/backend/access/gin/gininsert.c
    @@ -1120,6 +1120,10 @@ _gin_end_parallel(GinLeader *ginleader, GinBuildState *state)
     	/* Shutdown worker processes */
     	WaitForParallelWorkersToFinish(ginleader->pcxt);
     
    +	LogParallelWorkersIfNeeded(log_parallel_workers,
    +							   ginleader->pcxt->nworkers_to_launch,
    +							   ginleader->pcxt->nworkers_launched);
    +
     	/*
     	 * Next, accumulate WAL usage.  (This must wait for the workers to finish,
     	 * or we might get incomplete data.)
    diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c
    index 756dfa3dcf4..2670e88cd22 100644
    --- a/src/backend/access/nbtree/nbtsort.c
    +++ b/src/backend/access/nbtree/nbtsort.c
    @@ -1615,6 +1615,10 @@ _bt_end_parallel(BTLeader *btleader)
     	/* Shutdown worker processes */
     	WaitForParallelWorkersToFinish(btleader->pcxt);
     
    +	LogParallelWorkersIfNeeded(log_parallel_workers,
    +							   btleader->pcxt->nworkers_to_launch,
    +							   btleader->pcxt->nworkers_launched);
    +
     	/*
     	 * Next, accumulate WAL usage.  (This must wait for the workers to finish,
     	 * or we might get incomplete data.)
    diff --git a/src/backend/commands/vacuumparallel.c b/src/backend/commands/vacuumparallel.c
    index 41cefcfde54..611d67154b9 100644
    --- a/src/backend/commands/vacuumparallel.c
    +++ b/src/backend/commands/vacuumparallel.c
    @@ -257,6 +257,9 @@ struct ParallelVacuumState
     	int			nindexes_parallel_cleanup;
     	int			nindexes_parallel_condcleanup;
     
    +	int			nworkers_to_launch;
    +	int			nworkers_launched;
    +
     	/* Buffer access strategy used by leader process */
     	BufferAccessStrategy bstrategy;
     
    @@ -424,6 +427,9 @@ parallel_vacuum_init(Relation rel, Relation *indrels, int nindexes,
     		if ((vacoptions & VACUUM_OPTION_PARALLEL_COND_CLEANUP) != 0)
     			pvs->nindexes_parallel_condcleanup++;
     	}
    +	pvs->nworkers_to_launch = 0;
    +	pvs->nworkers_launched = 0;
    +
     	shm_toc_insert(pcxt->toc, PARALLEL_VACUUM_KEY_INDEX_STATS, indstats);
     	pvs->indstats = indstats;
     
    @@ -516,6 +522,10 @@ parallel_vacuum_end(ParallelVacuumState *pvs, IndexBulkDeleteResult **istats)
     {
     	Assert(!IsParallelWorker());
     
    +	LogParallelWorkersIfNeeded(log_parallel_workers,
    +							   pvs->nworkers_to_launch,
    +							   pvs->nworkers_launched);
    +
     	/* Copy the updated statistics */
     	for (int i = 0; i < pvs->nindexes; i++)
     	{
    @@ -946,6 +956,9 @@ parallel_vacuum_process_all_indexes(ParallelVacuumState *pvs, int num_index_scan
     
     		for (int i = 0; i < pvs->pcxt->nworkers_launched; i++)
     			InstrAccumParallelQuery(&pvs->buffer_usage[i], &pvs->wal_usage[i]);
    +
    +		pvs->nworkers_to_launch += pvs->pcxt->nworkers_to_launch;
    +		pvs->nworkers_launched += pvs->pcxt->nworkers_launched;
     	}
     
     	/*
    -- 
    2.47.3
    
    
    --alfjcfchgbd4n3kz
    Content-Type: text/x-diff; charset=utf-8
    Content-Disposition: attachment;
    	filename=v11-0003-Implements-logging-for-parallel-worker-usage-in-.patch