mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-11 15:16:54 +08:00
Moved FlushPages before HnswEndParallel
This commit is contained in:
@@ -885,7 +885,7 @@ BuildGraph(HnswBuildState * buildstate, ForkNumber forkNum)
|
|||||||
UpdateProgress(PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_HNSW_PHASE_LOAD);
|
UpdateProgress(PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_HNSW_PHASE_LOAD);
|
||||||
|
|
||||||
/* Calculate parallel workers */
|
/* Calculate parallel workers */
|
||||||
if (hnsw_enable_parallel_build)
|
if (buildstate->heap != NULL && hnsw_enable_parallel_build)
|
||||||
parallel_workers = ComputeParallelWorkers(buildstate->heap, buildstate->index);
|
parallel_workers = ComputeParallelWorkers(buildstate->heap, buildstate->index);
|
||||||
|
|
||||||
/* Attempt to launch parallel worker scan when required */
|
/* Attempt to launch parallel worker scan when required */
|
||||||
@@ -896,20 +896,27 @@ BuildGraph(HnswBuildState * buildstate, ForkNumber forkNum)
|
|||||||
HnswBeginParallel(buildstate, buildstate->indexInfo->ii_Concurrent, parallel_workers);
|
HnswBeginParallel(buildstate, buildstate->indexInfo->ii_Concurrent, parallel_workers);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add tuples to sort */
|
/* Add tuples to graph */
|
||||||
if (buildstate->hnswleader)
|
if (buildstate->heap != NULL)
|
||||||
buildstate->reltuples = ParallelHeapScan(buildstate);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
|
if (buildstate->hnswleader)
|
||||||
|
buildstate->reltuples = ParallelHeapScan(buildstate);
|
||||||
|
else
|
||||||
|
{
|
||||||
#if PG_VERSION_NUM >= 120000
|
#if PG_VERSION_NUM >= 120000
|
||||||
buildstate->reltuples = table_index_build_scan(buildstate->heap, buildstate->index, buildstate->indexInfo,
|
buildstate->reltuples = table_index_build_scan(buildstate->heap, buildstate->index, buildstate->indexInfo,
|
||||||
true, true, BuildCallback, (void *) buildstate, NULL);
|
true, true, BuildCallback, (void *) buildstate, NULL);
|
||||||
#else
|
#else
|
||||||
buildstate->reltuples = IndexBuildHeapScan(buildstate->heap, buildstate->index, buildstate->indexInfo,
|
buildstate->reltuples = IndexBuildHeapScan(buildstate->heap, buildstate->index, buildstate->indexInfo,
|
||||||
true, BuildCallback, (void *) buildstate, NULL);
|
true, BuildCallback, (void *) buildstate, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Flush pages */
|
||||||
|
if (!buildstate->flushed)
|
||||||
|
FlushPages(buildstate);
|
||||||
|
|
||||||
/* End parallel build */
|
/* End parallel build */
|
||||||
if (buildstate->hnswleader)
|
if (buildstate->hnswleader)
|
||||||
HnswEndParallel(buildstate->hnswleader);
|
HnswEndParallel(buildstate->hnswleader);
|
||||||
@@ -944,11 +951,7 @@ BuildIndex(Relation heap, Relation index, IndexInfo *indexInfo,
|
|||||||
|
|
||||||
InitBuildState(buildstate, heap, index, indexInfo, forkNum);
|
InitBuildState(buildstate, heap, index, indexInfo, forkNum);
|
||||||
|
|
||||||
if (buildstate->heap != NULL)
|
BuildGraph(buildstate, forkNum);
|
||||||
BuildGraph(buildstate, forkNum);
|
|
||||||
|
|
||||||
if (!buildstate->flushed)
|
|
||||||
FlushPages(buildstate);
|
|
||||||
|
|
||||||
if (RelationNeedsWAL(index))
|
if (RelationNeedsWAL(index))
|
||||||
log_newpage_range(index, forkNum, 0, RelationGetNumberOfBlocks(index), true);
|
log_newpage_range(index, forkNum, 0, RelationGetNumberOfBlocks(index), true);
|
||||||
|
|||||||
Reference in New Issue
Block a user