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,
