mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
Revert "Fix accumulation of parallel worker instrumentation."
This reverts commit 2c09a5c12a
. Per
further discussion, that doesn't seem to be the best possible fix.
Discussion: http://postgr.es/m/CAA4eK1LW2aFKzY3=vwvc=t-juzPPVWP2uT1bpx_MeyEqnM+p8g@mail.gmail.com
This commit is contained in:
@ -819,19 +819,6 @@ ExecParallelReinitialize(PlanState *planstate,
|
||||
/* Old workers must already be shut down */
|
||||
Assert(pei->finished);
|
||||
|
||||
/* Clear the instrumentation space from the last round. */
|
||||
if (pei->instrumentation)
|
||||
{
|
||||
Instrumentation *instrument;
|
||||
SharedExecutorInstrumentation *sh_instr;
|
||||
int i;
|
||||
|
||||
sh_instr = pei->instrumentation;
|
||||
instrument = GetInstrumentationArray(sh_instr);
|
||||
for (i = 0; i < sh_instr->num_workers * sh_instr->num_plan_nodes; ++i)
|
||||
InstrInit(&instrument[i], pei->planstate->state->es_instrument);
|
||||
}
|
||||
|
||||
/* Force parameters we're going to pass to workers to be evaluated. */
|
||||
ExecEvalParamExecParams(sendParams, estate);
|
||||
|
||||
@ -953,33 +940,21 @@ ExecParallelRetrieveInstrumentation(PlanState *planstate,
|
||||
for (n = 0; n < instrumentation->num_workers; ++n)
|
||||
InstrAggNode(planstate->instrument, &instrument[n]);
|
||||
|
||||
if (!planstate->worker_instrument)
|
||||
{
|
||||
/*
|
||||
* Allocate space for the per-worker detail.
|
||||
*
|
||||
* Worker instrumentation should be allocated in the same context as
|
||||
* the regular instrumentation information, which is the per-query
|
||||
* context. Switch into per-query memory context.
|
||||
*/
|
||||
oldcontext = MemoryContextSwitchTo(planstate->state->es_query_cxt);
|
||||
ibytes =
|
||||
mul_size(instrumentation->num_workers, sizeof(Instrumentation));
|
||||
planstate->worker_instrument =
|
||||
palloc(ibytes + offsetof(WorkerInstrumentation, instrument));
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
|
||||
for (n = 0; n < instrumentation->num_workers; ++n)
|
||||
InstrInit(&planstate->worker_instrument->instrument[n],
|
||||
planstate->state->es_instrument);
|
||||
}
|
||||
/*
|
||||
* Also store the per-worker detail.
|
||||
*
|
||||
* Worker instrumentation should be allocated in the same context as the
|
||||
* regular instrumentation information, which is the per-query context.
|
||||
* Switch into per-query memory context.
|
||||
*/
|
||||
oldcontext = MemoryContextSwitchTo(planstate->state->es_query_cxt);
|
||||
ibytes = mul_size(instrumentation->num_workers, sizeof(Instrumentation));
|
||||
planstate->worker_instrument =
|
||||
palloc(ibytes + offsetof(WorkerInstrumentation, instrument));
|
||||
MemoryContextSwitchTo(oldcontext);
|
||||
|
||||
planstate->worker_instrument->num_workers = instrumentation->num_workers;
|
||||
|
||||
/* Accumulate the per-worker detail. */
|
||||
for (n = 0; n < instrumentation->num_workers; ++n)
|
||||
InstrAggNode(&planstate->worker_instrument->instrument[n],
|
||||
&instrument[n]);
|
||||
memcpy(&planstate->worker_instrument->instrument, instrument, ibytes);
|
||||
|
||||
/* Perform any node-type-specific work that needs to be done. */
|
||||
switch (nodeTag(planstate))
|
||||
|
Reference in New Issue
Block a user