Skip to content

Commit 6132428

Browse files
committed
Improved number of parallel workers for HNSW index builds - closes #397
1 parent 81d13bd commit 6132428

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

src/hnswbuild.c

+22-1
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,27 @@ HnswBeginParallel(HnswBuildState * buildstate, bool isconcurrent, int request)
853853
WaitForParallelWorkersToAttach(pcxt);
854854
}
855855

856+
/*
857+
* Compute parallel workers
858+
*/
859+
static int
860+
ComputeParallelWorkers(Relation heap, Relation index)
861+
{
862+
int parallel_workers;
863+
864+
/* Make sure it's safe to use parallel workers */
865+
parallel_workers = plan_create_index_workers(RelationGetRelid(heap), RelationGetRelid(index));
866+
if (parallel_workers == 0)
867+
return 0;
868+
869+
/* Use parallel_workers storage parameter on table if set */
870+
parallel_workers = RelationGetParallelWorkers(heap, -1);
871+
if (parallel_workers != -1)
872+
return Min(parallel_workers, max_parallel_maintenance_workers);
873+
874+
return max_parallel_maintenance_workers;
875+
}
876+
856877
/*
857878
* Build graph
858879
*/
@@ -865,7 +886,7 @@ BuildGraph(HnswBuildState * buildstate, ForkNumber forkNum)
865886

866887
/* Calculate parallel workers */
867888
if (hnsw_enable_parallel_build)
868-
parallel_workers = plan_create_index_workers(RelationGetRelid(buildstate->heap), RelationGetRelid(buildstate->index));
889+
parallel_workers = ComputeParallelWorkers(buildstate->heap, buildstate->index);
869890

870891
/* Attempt to launch parallel worker scan when required */
871892
if (parallel_workers > 0)

0 commit comments

Comments
 (0)