diff options
Diffstat (limited to 'src/backend/executor/execParallel.c')
-rw-r--r-- | src/backend/executor/execParallel.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index a409a9a571f..e6930c1d51c 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -71,7 +71,7 @@ typedef struct ExecParallelInitializeDSMContext } ExecParallelInitializeDSMContext; /* Helper functions that run in the parallel leader. */ -static char *ExecSerializePlan(Plan *plan, List *rangetable); +static char *ExecSerializePlan(Plan *plan, EState *estate); static bool ExecParallelEstimate(PlanState *node, ExecParallelEstimateContext *e); static bool ExecParallelInitializeDSM(PlanState *node, @@ -88,7 +88,7 @@ static DestReceiver *ExecParallelGetReceiver(dsm_segment *seg, shm_toc *toc); * Create a serialized representation of the plan to be sent to each worker. */ static char * -ExecSerializePlan(Plan *plan, List *rangetable) +ExecSerializePlan(Plan *plan, EState *estate) { PlannedStmt *pstmt; ListCell *tlist; @@ -125,13 +125,13 @@ ExecSerializePlan(Plan *plan, List *rangetable) pstmt->canSetTag = 1; pstmt->transientPlan = 0; pstmt->planTree = plan; - pstmt->rtable = rangetable; + pstmt->rtable = estate->es_range_table; pstmt->resultRelations = NIL; pstmt->utilityStmt = NULL; pstmt->subplans = NIL; pstmt->rewindPlanIDs = NULL; pstmt->rowMarks = NIL; - pstmt->nParamExec = 0; + pstmt->nParamExec = estate->es_plannedstmt->nParamExec; pstmt->relationOids = NIL; pstmt->invalItems = NIL; /* workers can't replan anyway... */ pstmt->hasRowSecurity = false; @@ -271,7 +271,7 @@ ExecInitParallelPlan(PlanState *planstate, EState *estate, int nworkers) pei->planstate = planstate; /* Fix up and serialize plan to be sent to workers. */ - pstmt_data = ExecSerializePlan(planstate->plan, estate->es_range_table); + pstmt_data = ExecSerializePlan(planstate->plan, estate); /* Create a parallel context. */ pcxt = CreateParallelContext(ParallelQueryMain, nworkers); @@ -568,7 +568,6 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) ExecutorStart(queryDesc, 0); ExecutorRun(queryDesc, ForwardScanDirection, 0L); ExecutorFinish(queryDesc); - ExecutorEnd(queryDesc); /* Report buffer usage during parallel execution. */ buffer_usage = shm_toc_lookup(toc, PARALLEL_KEY_BUFFER_USAGE); @@ -579,6 +578,9 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) ExecParallelReportInstrumentation(queryDesc->planstate, instrumentation); + /* Must do this after capturing instrumentation. */ + ExecutorEnd(queryDesc); + /* Cleanup. */ FreeQueryDesc(queryDesc); (*receiver->rDestroy) (receiver); |