mirror of
https://github.com/postgres/postgres.git
synced 2025-07-09 22:41:56 +03:00
Fix EXPLAIN ANALYZE for parallel HashAgg plans
Since 1f39bce02
, HashAgg nodes have had the ability to spill to disk when
memory consumption exceeds work_mem. That commit added new properties to
EXPLAIN ANALYZE to show the maximum memory usage and disk usage, however,
it didn't quite go as far as showing that information for parallel
workers. Since workers may have experienced something very different from
the main process, we should show this information per worker, as is done
in Sort.
Reviewed-by: Justin Pryzby
Reviewed-by: Jeff Davis
Discussion: https://postgr.es/m/CAApHDvpEKbfZa18mM1TD7qV6PG+w97pwCWq5tVD0dX7e11gRJw@mail.gmail.com
Backpatch-through: 13, where the hashagg spilling code was added.
This commit is contained in:
@ -25,6 +25,7 @@
|
||||
|
||||
#include "executor/execParallel.h"
|
||||
#include "executor/executor.h"
|
||||
#include "executor/nodeAgg.h"
|
||||
#include "executor/nodeAppend.h"
|
||||
#include "executor/nodeBitmapHeapscan.h"
|
||||
#include "executor/nodeCustom.h"
|
||||
@ -288,7 +289,10 @@ ExecParallelEstimate(PlanState *planstate, ExecParallelEstimateContext *e)
|
||||
/* even when not parallel-aware, for EXPLAIN ANALYZE */
|
||||
ExecIncrementalSortEstimate((IncrementalSortState *) planstate, e->pcxt);
|
||||
break;
|
||||
|
||||
case T_AggState:
|
||||
/* even when not parallel-aware, for EXPLAIN ANALYZE */
|
||||
ExecAggEstimate((AggState *) planstate, e->pcxt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -505,7 +509,10 @@ ExecParallelInitializeDSM(PlanState *planstate,
|
||||
/* even when not parallel-aware, for EXPLAIN ANALYZE */
|
||||
ExecIncrementalSortInitializeDSM((IncrementalSortState *) planstate, d->pcxt);
|
||||
break;
|
||||
|
||||
case T_AggState:
|
||||
/* even when not parallel-aware, for EXPLAIN ANALYZE */
|
||||
ExecAggInitializeDSM((AggState *) planstate, d->pcxt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1048,6 +1055,9 @@ ExecParallelRetrieveInstrumentation(PlanState *planstate,
|
||||
case T_HashState:
|
||||
ExecHashRetrieveInstrumentation((HashState *) planstate);
|
||||
break;
|
||||
case T_AggState:
|
||||
ExecAggRetrieveInstrumentation((AggState *) planstate);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@ -1336,7 +1346,10 @@ ExecParallelInitializeWorker(PlanState *planstate, ParallelWorkerContext *pwcxt)
|
||||
ExecIncrementalSortInitializeWorker((IncrementalSortState *) planstate,
|
||||
pwcxt);
|
||||
break;
|
||||
|
||||
case T_AggState:
|
||||
/* even when not parallel-aware, for EXPLAIN ANALYZE */
|
||||
ExecAggInitializeWorker((AggState *) planstate, pwcxt);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user