mirror of
https://github.com/postgres/postgres.git
synced 2026-03-15 07:04:10 -04:00
This allows gathering the WAL generation statistics for each statement execution. The three statistics that we collect are the number of WAL records, the number of full page writes and the amount of WAL bytes generated. This helps the users who have write-intensive workload to see the impact of I/O due to WAL. This further enables us to see approximately what percentage of overall WAL is due to full page writes. In the future, we can extend this functionality to allow us to compute the the exact amount of WAL data due to full page writes. This patch in itself is just an infrastructure to compute WAL usage data. The upcoming patches will expose this data via explain, auto_explain, pg_stat_statements and verbose (auto)vacuum output. Author: Kirill Bychik, Julien Rouhaud Reviewed-by: Dilip Kumar, Fujii Masao and Amit Kapila Discussion: https://postgr.es/m/CAB-hujrP8ZfUkvL5OYETipQwA=e3n7oqHFU=4ZLxWS_Cza3kQQ@mail.gmail.com
51 lines
2 KiB
C
51 lines
2 KiB
C
/*--------------------------------------------------------------------
|
|
* execParallel.h
|
|
* POSTGRES parallel execution interface
|
|
*
|
|
* Portions Copyright (c) 1996-2020, 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 */
|
|
WalUsage *wal_usage; /* walusage 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 */
|