mirror of
https://github.com/postgres/postgres.git
synced 2026-02-12 15:23:16 -05:00
Previously, when using parallel query, EXPLAIN (ANALYZE)'s JIT compilation timings did not include the overhead from doing so on the workers. Fix that. We do so by simply aggregating the cost of doing JIT compilation on workers and the leader together. Arguably that's not quite accurate, because the total time spend doing so is spent in parallel - but it's hard to do much better. For additional detail, when VERBOSE is specified, the stats for workers are displayed separately. Author: Amit Khandekar and Andres Freund Discussion: https://postgr.es/m/CAJ3gD9eLrz51RK_gTkod+71iDcjpB_N8eC6vU2AW-VicsAERpQ@mail.gmail.com Backpatch: 11-
50 lines
2 KiB
C
50 lines
2 KiB
C
/*--------------------------------------------------------------------
|
|
* execParallel.h
|
|
* POSTGRES parallel execution interface
|
|
*
|
|
* Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* IDENTIFICATION
|
|
* src/include/executor/execParallel.h
|
|
*--------------------------------------------------------------------
|
|
*/
|
|
|
|
#ifndef EXECPARALLEL_H
|
|
#define EXECPARALLEL_H
|
|
|
|
#include "access/parallel.h"
|
|
#include "nodes/execnodes.h"
|
|
#include "nodes/parsenodes.h"
|
|
#include "nodes/plannodes.h"
|
|
#include "utils/dsa.h"
|
|
|
|
typedef struct SharedExecutorInstrumentation SharedExecutorInstrumentation;
|
|
|
|
typedef struct ParallelExecutorInfo
|
|
{
|
|
PlanState *planstate; /* plan subtree we're running in parallel */
|
|
ParallelContext *pcxt; /* parallel context we're using */
|
|
BufferUsage *buffer_usage; /* points to bufusage area in DSM */
|
|
SharedExecutorInstrumentation *instrumentation; /* optional */
|
|
struct SharedJitInstrumentation *jit_instrumentation; /* optional */
|
|
dsa_area *area; /* points to DSA area in DSM */
|
|
dsa_pointer param_exec; /* serialized PARAM_EXEC parameters */
|
|
bool finished; /* set true by ExecParallelFinish */
|
|
/* These two arrays have pcxt->nworkers_launched entries: */
|
|
shm_mq_handle **tqueue; /* tuple queues for worker output */
|
|
struct TupleQueueReader **reader; /* tuple reader/writer support */
|
|
} ParallelExecutorInfo;
|
|
|
|
extern ParallelExecutorInfo *ExecInitParallelPlan(PlanState *planstate,
|
|
EState *estate, Bitmapset *sendParam, int nworkers,
|
|
int64 tuples_needed);
|
|
extern void ExecParallelCreateReaders(ParallelExecutorInfo *pei);
|
|
extern void ExecParallelFinish(ParallelExecutorInfo *pei);
|
|
extern void ExecParallelCleanup(ParallelExecutorInfo *pei);
|
|
extern void ExecParallelReinitialize(PlanState *planstate,
|
|
ParallelExecutorInfo *pei, Bitmapset *sendParam);
|
|
|
|
extern void ParallelQueryMain(dsm_segment *seg, shm_toc *toc);
|
|
|
|
#endif /* EXECPARALLEL_H */
|