diff --git a/src/backend/executor/execParallel.c b/src/backend/executor/execParallel.c index 6730037..8002004 100644 --- a/src/backend/executor/execParallel.c +++ b/src/backend/executor/execParallel.c @@ -650,19 +650,21 @@ ParallelQueryMain(dsm_segment *seg, shm_toc *toc) instrument_options = instrumentation->instrument_options; queryDesc = ExecParallelGetQueryDesc(toc, receiver, instrument_options); - /* Prepare to track buffer usage during query execution. */ - InstrStartParallelQuery(); - /* Start up the executor, have it run the plan, and then shut it down. */ ExecutorStart(queryDesc, 0); + ExecParallelInitializeWorker(queryDesc->planstate, toc); + /* Prepare to track buffer usage during query execution. */ + InstrStartParallelQuery(); + ExecutorRun(queryDesc, ForwardScanDirection, 0L); - ExecutorFinish(queryDesc); /* Report buffer usage during parallel execution. */ buffer_usage = shm_toc_lookup(toc, PARALLEL_KEY_BUFFER_USAGE); InstrEndParallelQuery(&buffer_usage[ParallelWorkerNumber]); + ExecutorFinish(queryDesc); + /* Report instrumentation data if any instrumentation options are set. */ if (instrumentation != NULL) ExecParallelReportInstrumentation(queryDesc->planstate,