Hey there, Based on the Alvaro's idea [1] about moving different instrumentation related C structures and enums into one single header file, I'm sending the following patches. That single file is named `executor/instrument_node.h`
Local tests and CI tests are passing https://cirrus-ci.com/build/6171192257675264 Thanks for reviewing them, cheers. [1] https://www.postgresql.org/message-id/202510051642.wwmn4mj77wch%40alvherre.pgsql -- Mario Gonzalez EDB: https://www.enterprisedb.com
From 4e46a068f685c14d769257dba75f237589a93e90 Mon Sep 17 00:00:00 2001 From: Mario Gonzalez <[email protected]> Date: Thu, 6 Nov 2025 17:50:36 -0300 Subject: [PATCH 2/4] Remove brin/gin_tuple.h from tuplesort.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Because execnodes.h depends on struct definitions that were in genam.h, which it no longer gets because of the aforementioned removal. Author: Álvaro Herrera <[email protected]> --- contrib/pageinspect/gistfuncs.c | 1 + src/backend/access/gin/gininsert.c | 1 + src/backend/catalog/pg_attrdef.c | 1 + src/backend/replication/logical/sequencesync.c | 1 + src/include/nodes/execnodes.h | 1 + src/include/utils/tuplesort.h | 5 +++-- 6 files changed, 8 insertions(+), 2 deletions(-) diff --git a/contrib/pageinspect/gistfuncs.c b/contrib/pageinspect/gistfuncs.c index de3746a156b..190353ec354 100644 --- a/contrib/pageinspect/gistfuncs.c +++ b/contrib/pageinspect/gistfuncs.c @@ -9,6 +9,7 @@ */ #include "postgres.h" +#include "access/genam.h" #include "access/gist.h" #include "access/htup.h" #include "access/htup_details.h" diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index b92204e2862..45404cb78ab 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -33,6 +33,7 @@ #include "utils/datum.h" #include "utils/memutils.h" #include "utils/rel.h" +#include "utils/typcache.h" /* Magic numbers for parallel state sharing */ diff --git a/src/backend/catalog/pg_attrdef.c b/src/backend/catalog/pg_attrdef.c index 29f5691bee9..e8bdb52cb00 100644 --- a/src/backend/catalog/pg_attrdef.c +++ b/src/backend/catalog/pg_attrdef.c @@ -14,6 +14,7 @@ */ #include "postgres.h" +#include "access/genam.h" #include "access/htup_details.h" #include "access/relation.h" #include "access/table.h" diff --git a/src/backend/replication/logical/sequencesync.c b/src/backend/replication/logical/sequencesync.c index e093e65e540..b665c694209 100644 --- a/src/backend/replication/logical/sequencesync.c +++ b/src/backend/replication/logical/sequencesync.c @@ -52,6 +52,7 @@ #include "postgres.h" #include "access/table.h" +#include "access/genam.h" #include "catalog/pg_sequence.h" #include "catalog/pg_subscription_rel.h" #include "commands/sequence.h" diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 79da9305408..29bcd7dfc05 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -29,6 +29,7 @@ #ifndef EXECNODES_H #define EXECNODES_H +#include "access/skey.h" #include "access/tupconvert.h" #include "executor/instrument.h" #include "fmgr.h" diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h index 06c5c1de4e4..c844899007a 100644 --- a/src/include/utils/tuplesort.h +++ b/src/include/utils/tuplesort.h @@ -21,8 +21,6 @@ #ifndef TUPLESORT_H #define TUPLESORT_H -#include "access/brin_tuple.h" -#include "access/gin_tuple.h" #include "access/itup.h" #include "executor/instrument_node.h" #include "executor/tuptable.h" @@ -31,6 +29,9 @@ #include "utils/relcache.h" #include "utils/sortsupport.h" +/* We don't want this file to depend on AM-specific header files */ +typedef struct BrinTuple BrinTuple; +typedef struct GinTuple GinTuple; /* * Tuplesortstate and Sharedsort are opaque types whose details are not -- 2.39.5
From fd4bafc5a40e75a5fdd3cb064ed5258ce90070e9 Mon Sep 17 00:00:00 2001 From: Mario Gonzalez <[email protected]> Date: Wed, 5 Nov 2025 17:19:08 -0300 Subject: [PATCH 3/4] Remove storage/buf.h from access/relscan.h --- src/include/access/relscan.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/include/access/relscan.h b/src/include/access/relscan.h index b5e0fb386c0..702185bcb75 100644 --- a/src/include/access/relscan.h +++ b/src/include/access/relscan.h @@ -18,7 +18,6 @@ #include "access/itup.h" #include "nodes/tidbitmap.h" #include "port/atomics.h" -#include "storage/buf.h" #include "storage/relfilelocator.h" #include "storage/spin.h" #include "utils/relcache.h" -- 2.39.5
From ba55059451c11d3608fc588dd5cc2221f48c47e6 Mon Sep 17 00:00:00 2001 From: Mario Gonzalez <[email protected]> Date: Mon, 3 Nov 2025 19:36:23 -0300 Subject: [PATCH 4/4] Remove unused headers from execReplication.c Signed-off-by: Mario Gonzalez <[email protected]> --- src/backend/executor/execReplication.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index 3ca2ff8e466..5015d03e43f 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -17,13 +17,11 @@ #include "access/amapi.h" #include "access/commit_ts.h" #include "access/genam.h" -#include "access/gist.h" #include "access/relscan.h" #include "access/tableam.h" #include "access/transam.h" #include "access/xact.h" #include "access/heapam.h" -#include "catalog/pg_am_d.h" #include "commands/trigger.h" #include "executor/executor.h" #include "executor/nodeModifyTable.h" -- 2.39.5
From 46f8c3845669bb43388c7511bbaff9eb6fe937a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Sun, 5 Oct 2025 18:54:56 +0200 Subject: [PATCH 1/4] Move instrumentation related structures into instrument_node.h MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We have structs and enums that are related to instrumentation and they were mixed in different parts of the code. This commit defines them in a separate header to centralise all of them. Co-authored-by: Álvaro Herrera <[email protected]> Co-authored-by: Mario Gonzalez <[email protected]> Discussion: https://www.postgresql.org/message-id/202510051642.wwmn4mj77wch%40alvherre.pgsql --- contrib/bloom/blscan.c | 1 + src/backend/access/gin/gininsert.c | 2 +- src/backend/access/gin/ginscan.c | 1 + src/backend/access/gist/gistget.c | 1 + src/backend/access/hash/hashsearch.c | 1 + src/backend/access/nbtree/nbtsearch.c | 1 + src/backend/access/spgist/spgscan.c | 1 + src/backend/catalog/pg_largeobject.c | 1 + src/backend/executor/execReplication.c | 1 + src/backend/parser/parse_expr.c | 1 + src/backend/replication/logical/relation.c | 1 + src/backend/statistics/attribute_stats.c | 1 + src/include/access/genam.h | 23 +-- src/include/executor/instrument_node.h | 197 +++++++++++++++++++++ src/include/nodes/execnodes.h | 140 --------------- src/include/utils/tuplesort.h | 22 +-- 16 files changed, 211 insertions(+), 184 deletions(-) create mode 100644 src/include/executor/instrument_node.h diff --git a/contrib/bloom/blscan.c b/contrib/bloom/blscan.c index d072f47fe28..5f8378d1f44 100644 --- a/contrib/bloom/blscan.c +++ b/contrib/bloom/blscan.c @@ -14,6 +14,7 @@ #include "access/relscan.h" #include "bloom.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/bufmgr.h" diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index c2b879b2bf6..b92204e2862 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -29,10 +29,10 @@ #include "storage/bufmgr.h" #include "storage/predicate.h" #include "tcop/tcopprot.h" +#include "utils/builtins.h" #include "utils/datum.h" #include "utils/memutils.h" #include "utils/rel.h" -#include "utils/builtins.h" /* Magic numbers for parallel state sharing */ diff --git a/src/backend/access/gin/ginscan.c b/src/backend/access/gin/ginscan.c index 26081693383..1c9a8cb4df8 100644 --- a/src/backend/access/gin/ginscan.c +++ b/src/backend/access/gin/ginscan.c @@ -16,6 +16,7 @@ #include "access/gin_private.h" #include "access/relscan.h" +#include "executor/instrument_node.h" #include "pgstat.h" #include "utils/memutils.h" #include "utils/rel.h" diff --git a/src/backend/access/gist/gistget.c b/src/backend/access/gist/gistget.c index 9ba45acfff3..771768d31d6 100644 --- a/src/backend/access/gist/gistget.c +++ b/src/backend/access/gist/gistget.c @@ -17,6 +17,7 @@ #include "access/genam.h" #include "access/gist_private.h" #include "access/relscan.h" +#include "executor/instrument_node.h" #include "lib/pairingheap.h" #include "miscadmin.h" #include "pgstat.h" diff --git a/src/backend/access/hash/hashsearch.c b/src/backend/access/hash/hashsearch.c index 92c15a65be2..00395b01f60 100644 --- a/src/backend/access/hash/hashsearch.c +++ b/src/backend/access/hash/hashsearch.c @@ -17,6 +17,7 @@ #include "access/hash.h" #include "access/relscan.h" #include "miscadmin.h" +#include "executor/instrument_node.h" #include "pgstat.h" #include "storage/predicate.h" #include "utils/rel.h" diff --git a/src/backend/access/nbtree/nbtsearch.c b/src/backend/access/nbtree/nbtsearch.c index 0605356ec9f..7211e5e291b 100644 --- a/src/backend/access/nbtree/nbtsearch.c +++ b/src/backend/access/nbtree/nbtsearch.c @@ -18,6 +18,7 @@ #include "access/nbtree.h" #include "access/relscan.h" #include "access/xact.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/predicate.h" diff --git a/src/backend/access/spgist/spgscan.c b/src/backend/access/spgist/spgscan.c index 25893050c58..abfb3555af5 100644 --- a/src/backend/access/spgist/spgscan.c +++ b/src/backend/access/spgist/spgscan.c @@ -18,6 +18,7 @@ #include "access/genam.h" #include "access/relscan.h" #include "access/spgist_private.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pgstat.h" #include "storage/bufmgr.h" diff --git a/src/backend/catalog/pg_largeobject.c b/src/backend/catalog/pg_largeobject.c index 33e8fa96a65..ada4c3685e0 100644 --- a/src/backend/catalog/pg_largeobject.c +++ b/src/backend/catalog/pg_largeobject.c @@ -14,6 +14,7 @@ */ #include "postgres.h" +#include "access/genam.h" #include "access/htup_details.h" #include "access/table.h" #include "catalog/catalog.h" diff --git a/src/backend/executor/execReplication.c b/src/backend/executor/execReplication.c index def32774c90..3ca2ff8e466 100644 --- a/src/backend/executor/execReplication.c +++ b/src/backend/executor/execReplication.c @@ -14,6 +14,7 @@ #include "postgres.h" +#include "access/amapi.h" #include "access/commit_ts.h" #include "access/genam.h" #include "access/gist.h" diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 32d6ae918ca..3bdfcc20ebe 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -38,6 +38,7 @@ #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/timestamp.h" +#include "utils/typcache.h" #include "utils/xml.h" /* GUC parameters */ diff --git a/src/backend/replication/logical/relation.c b/src/backend/replication/logical/relation.c index 745fd3bab64..90294df91c0 100644 --- a/src/backend/replication/logical/relation.c +++ b/src/backend/replication/logical/relation.c @@ -29,6 +29,7 @@ #include "utils/inval.h" #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "utils/typcache.h" static MemoryContext LogicalRepRelMapContext = NULL; diff --git a/src/backend/statistics/attribute_stats.c b/src/backend/statistics/attribute_stats.c index ef4d768feab..9ccc04da3ef 100644 --- a/src/backend/statistics/attribute_stats.c +++ b/src/backend/statistics/attribute_stats.c @@ -31,6 +31,7 @@ #include "utils/fmgroids.h" #include "utils/lsyscache.h" #include "utils/syscache.h" +#include "utils/typcache.h" #define DEFAULT_NULL_FRAC Float4GetDatum(0.0) #define DEFAULT_AVG_WIDTH Int32GetDatum(0) /* unknown */ diff --git a/src/include/access/genam.h b/src/include/access/genam.h index 9200a22bd9f..87d744eff07 100644 --- a/src/include/access/genam.h +++ b/src/include/access/genam.h @@ -17,6 +17,7 @@ #include "access/htup.h" #include "access/sdir.h" #include "access/skey.h" +#include "executor/instrument_node.h" #include "nodes/tidbitmap.h" #include "storage/buf.h" #include "storage/lockdefs.h" @@ -29,28 +30,6 @@ typedef struct TupleTableSlot TupleTableSlot; /* or relcache.h */ typedef struct RelationData *Relation; - -/* - * Struct for statistics maintained by amgettuple and amgetbitmap - * - * Note: IndexScanInstrumentation can't contain any pointers, since it is - * copied into a SharedIndexScanInstrumentation during parallel scans - */ -typedef struct IndexScanInstrumentation -{ - /* Index search count (incremented with pgstat_count_index_scan call) */ - uint64 nsearches; -} IndexScanInstrumentation; - -/* - * Struct for every worker's IndexScanInstrumentation, stored in shared memory - */ -typedef struct SharedIndexScanInstrumentation -{ - int num_workers; - IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedIndexScanInstrumentation; - /* * Struct for statistics returned by ambuild */ diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h new file mode 100644 index 00000000000..fe4e1f8e5a8 --- /dev/null +++ b/src/include/executor/instrument_node.h @@ -0,0 +1,197 @@ +/*------------------------------------------------------------------------- + * + * instrument_node.h + * Definitions for node-specific instrumentation + * + * + * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group + * Portions Copyright (c) 1994, Regents of the University of California + * + * src/include/executor/instrument_node.h + * + *------------------------------------------------------------------------- + */ +#ifndef INSTRUMENT_NODE_H +#define INSTRUMENT_NODE_H + + + +/* --------------------- + * per-worker aggregate information + * --------------------- + */ +typedef struct AggregateInstrumentation +{ + Size hash_mem_peak; /* peak hash table memory usage */ + uint64 hash_disk_used; /*kB of disk space used */ + int hash_batches_used; /* batches used during entire execution */ +} AggregateInstrumentation; + +/* ---------------- + * Shared memory container for per-worker aggregate information + * ---------------- + */ +typedef struct SharedAgginfo +{ + int num_workers; + AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedAggInfo; +/* + * Struct for statistics maintained by amgettuple and amgetbitmap + * + * Note: IndexScanInstrumentation can't contain any pointers, since it is + * copied into a SharedIndexScanInstrumentation during parallel scans + */ +typedef struct IndexScanInstrumentation +{ + /* Index search count (incremented with pgstat_count_index_scan call) */ + uint64 nsearches; +} IndexScanInstrumentation; + +/* + * Struct for every worker's IndexScanInstrumentation, stored in shared memory + */ +typedef struct SharedIndexScanInstrumentation +{ + int num_workers; + IndexScanInstrumentation winstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedIndexScanInstrumentation; + +/* + * BitmapHeapScanInstrumentation information + * + * exact_pages total number of exact pages retrieved + * lossy_pages total number of lossy pages retrieved + */ +typedef struct BitmapHeapScanInstrumentation +{ + uint64 exact_pages; + uint64 lossy_pages; +} BitmapHeapScanInstrumentation; + +/* + * Instrumentation data for a parallel bitmap heap scan. + * + * A shared memory struct that each parallel worker copies its + * BitmapHeapScanInstrumentation information into at executor shutdown to + * allow the leader to display the information in EXPLAIN ANALYZE. + */ +typedef struct SharedBitmapHeapInstrumentation +{ + int num_workers; + BitmapHeapScanInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedBitmapHeapInstrumentation; + + +typedef struct MemoizeInstrumentation +{ + uint64 cache_hits; /* number of rescans where we've found the + * scan parameters values to be cached */ + uint64 cache_misses; /* number of rescans where we've not found the + * scan parameters values to be cached */ + uint64 cache_evictions; /* number of cache entries removed due to + * the need to free memory */ + uint64 cache_overflows; /* number of times we've had to bypass the + * cache when filling it due to not being + * able to free enough space to store the + * current scan's tuples */ + uint64 mem_peak; /* peak memory usage in bytes */ + +} MemoizeInstrumentation; + +/* ---------------- + * Shared memory container for per-worker memoize information + * ---------------- + */ +typedef struct SharedMemoizeInfo +{ + int num_workers; + MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedMemoizeInfo; + +typedef enum +{ + SORT_SPACE_TYPE_DISK, + SORT_SPACE_TYPE_MEMORY, +} TuplesortSpaceType; + +typedef enum +{ + SORT_TYPE_STILL_IN_PROGRESS = 0, + SORT_TYPE_TOP_N_HEAPSORT = 1 << 0, + SORT_TYPE_QUICKSORT = 1 << 1, + SORT_TYPE_EXTERNAL_SORT = 1 << 2, + SORT_TYPE_EXTERNAL_MERGE = 1 << 3 +} TuplesortMethod; + +typedef struct TuplesortInstrumentation +{ + TuplesortMethod sortMethod; /* sort algorithm used */ + TuplesortSpaceType spaceType; /* type of space spaceUsed represents */ + int64 spaceUsed; /* space consumption, in kB */ +} TuplesortInstrumentation; + +/* ---------------- + * Shared memory container for per-worker sort information + * ---------------- + */ +typedef struct SharedSortInfo +{ + int num_workers; + TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedSortInfo; + +/* ---------------- + * Values displayed by EXPLAIN ANALYZE + * ---------------- + */ +typedef struct HashInstrumentation +{ + int nbuckets; /* number of buckets at end of execution */ + int nbuckets_original; /* planned number of buckets */ + int nbatch; /* number of batches at end of execution */ + int nbatch_original; /* planned number of batches */ + Size space_peak; /* peak memory usage in bytes */ +} HashInstrumentation; + +/* ---------------- + * Shared memory container for per-worker hash information + * ---------------- + */ +typedef struct SharedHashInfo +{ + int num_workers; + HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER]; +} SharedHashInfo; + +/* ---------------- + * Instrumentation information for IncrementalSort + * ---------------- + */ +typedef struct IncrementalSortGroupInfo +{ + int64 groupCount; + int64 maxDiskSpaceUsed; + int64 totalDiskSpaceUsed; + int64 maxMemorySpaceUsed; + int64 totalMemorySpaceUsed; + bits32 sortMethods; /* bitmask of TuplesortMethod */ +} IncrementalSortGroupInfo; + +typedef struct IncrementalSortInfo +{ + IncrementalSortGroupInfo fullsortGroupInfo; + IncrementalSortGroupInfo prefixsortGroupInfo; +} IncrementalSortInfo; + +/* ---------------- + * Shared memory container for per-worker incremental sort information + * ---------------- + */ +typedef struct SharedIncrementalSortInfo +{ + int num_workers; + IncrementalSortInfo sinfo[FLEXIBLE_ARRAY_MEMBER]; +} SharedIncrementalSortInfo; + +#endif /* INSTRUMENT_NODE_H */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 18ae8f0d4bb..79da9305408 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -1816,19 +1816,6 @@ typedef struct BitmapIndexScanState SharedIndexScanInstrumentation *biss_SharedInfo; } BitmapIndexScanState; -/* ---------------- - * BitmapHeapScanInstrumentation information - * - * exact_pages total number of exact pages retrieved - * lossy_pages total number of lossy pages retrieved - * ---------------- - */ -typedef struct BitmapHeapScanInstrumentation -{ - uint64 exact_pages; - uint64 lossy_pages; -} BitmapHeapScanInstrumentation; - /* ---------------- * SharedBitmapState information * @@ -1865,20 +1852,6 @@ typedef struct ParallelBitmapHeapState ConditionVariable cv; } ParallelBitmapHeapState; -/* ---------------- - * Instrumentation data for a parallel bitmap heap scan. - * - * A shared memory struct that each parallel worker copies its - * BitmapHeapScanInstrumentation information into at executor shutdown to - * allow the leader to display the information in EXPLAIN ANALYZE. - * ---------------- - */ -typedef struct SharedBitmapHeapInstrumentation -{ - int num_workers; - BitmapHeapScanInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedBitmapHeapInstrumentation; - /* ---------------- * BitmapHeapScanState information * @@ -2303,31 +2276,6 @@ struct MemoizeEntry; struct MemoizeTuple; struct MemoizeKey; -typedef struct MemoizeInstrumentation -{ - uint64 cache_hits; /* number of rescans where we've found the - * scan parameter values to be cached */ - uint64 cache_misses; /* number of rescans where we've not found the - * scan parameter values to be cached. */ - uint64 cache_evictions; /* number of cache entries removed due to - * the need to free memory */ - uint64 cache_overflows; /* number of times we've had to bypass the - * cache when filling it due to not being - * able to free enough space to store the - * current scan's tuples. */ - uint64 mem_peak; /* peak memory usage in bytes */ -} MemoizeInstrumentation; - -/* ---------------- - * Shared memory container for per-worker memoize information - * ---------------- - */ -typedef struct SharedMemoizeInfo -{ - int num_workers; - MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedMemoizeInfo; - /* ---------------- * MemoizeState information * @@ -2383,16 +2331,6 @@ typedef struct PresortedKeyData OffsetNumber attno; /* attribute number in tuple */ } PresortedKeyData; -/* ---------------- - * Shared memory container for per-worker sort information - * ---------------- - */ -typedef struct SharedSortInfo -{ - int num_workers; - TuplesortInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedSortInfo; - /* ---------------- * SortState information * ---------------- @@ -2412,40 +2350,6 @@ typedef struct SortState SharedSortInfo *shared_info; /* one entry per worker */ } SortState; -/* ---------------- - * Instrumentation information for IncrementalSort - * ---------------- - */ -typedef struct IncrementalSortGroupInfo -{ - int64 groupCount; - int64 maxDiskSpaceUsed; - int64 totalDiskSpaceUsed; - int64 maxMemorySpaceUsed; - int64 totalMemorySpaceUsed; - bits32 sortMethods; /* bitmask of TuplesortMethod */ -} IncrementalSortGroupInfo; - -typedef struct IncrementalSortInfo -{ - IncrementalSortGroupInfo fullsortGroupInfo; - IncrementalSortGroupInfo prefixsortGroupInfo; -} IncrementalSortInfo; - -/* ---------------- - * Shared memory container for per-worker incremental sort information - * ---------------- - */ -typedef struct SharedIncrementalSortInfo -{ - int num_workers; - IncrementalSortInfo sinfo[FLEXIBLE_ARRAY_MEMBER]; -} SharedIncrementalSortInfo; - -/* ---------------- - * IncrementalSortState information - * ---------------- - */ typedef enum { INCSORT_LOADFULLSORT, @@ -2488,27 +2392,6 @@ typedef struct GroupState bool grp_done; /* indicates completion of Group scan */ } GroupState; -/* --------------------- - * per-worker aggregate information - * --------------------- - */ -typedef struct AggregateInstrumentation -{ - Size hash_mem_peak; /* peak hash table memory usage */ - uint64 hash_disk_used; /* kB of disk space used */ - int hash_batches_used; /* batches used during entire execution */ -} AggregateInstrumentation; - -/* ---------------- - * Shared memory container for per-worker aggregate information - * ---------------- - */ -typedef struct SharedAggInfo -{ - int num_workers; - AggregateInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedAggInfo; - /* --------------------- * AggState information * @@ -2785,29 +2668,6 @@ typedef struct GatherMergeState struct binaryheap *gm_heap; /* binary heap of slot indices */ } GatherMergeState; -/* ---------------- - * Values displayed by EXPLAIN ANALYZE - * ---------------- - */ -typedef struct HashInstrumentation -{ - int nbuckets; /* number of buckets at end of execution */ - int nbuckets_original; /* planned number of buckets */ - int nbatch; /* number of batches at end of execution */ - int nbatch_original; /* planned number of batches */ - Size space_peak; /* peak memory usage in bytes */ -} HashInstrumentation; - -/* ---------------- - * Shared memory container for per-worker hash information - * ---------------- - */ -typedef struct SharedHashInfo -{ - int num_workers; - HashInstrumentation hinstrument[FLEXIBLE_ARRAY_MEMBER]; -} SharedHashInfo; - /* ---------------- * HashState information * ---------------- diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h index 0bf55902aa1..06c5c1de4e4 100644 --- a/src/include/utils/tuplesort.h +++ b/src/include/utils/tuplesort.h @@ -24,6 +24,7 @@ #include "access/brin_tuple.h" #include "access/gin_tuple.h" #include "access/itup.h" +#include "executor/instrument_node.h" #include "executor/tuptable.h" #include "storage/dsm.h" #include "utils/logtape.h" @@ -73,23 +74,9 @@ typedef struct SortCoordinateData *SortCoordinate; * different methods, so we need a separate bit for each one. Keep the * NUM_TUPLESORTMETHODS constant in sync with the number of bits! */ -typedef enum -{ - SORT_TYPE_STILL_IN_PROGRESS = 0, - SORT_TYPE_TOP_N_HEAPSORT = 1 << 0, - SORT_TYPE_QUICKSORT = 1 << 1, - SORT_TYPE_EXTERNAL_SORT = 1 << 2, - SORT_TYPE_EXTERNAL_MERGE = 1 << 3, -} TuplesortMethod; #define NUM_TUPLESORTMETHODS 4 -typedef enum -{ - SORT_SPACE_TYPE_DISK, - SORT_SPACE_TYPE_MEMORY, -} TuplesortSpaceType; - /* Bitwise option flags for tuple sorts */ #define TUPLESORT_NONE 0 @@ -108,13 +95,6 @@ typedef enum */ #define TupleSortUseBumpTupleCxt(opt) (((opt) & TUPLESORT_ALLOWBOUNDED) == 0) -typedef struct TuplesortInstrumentation -{ - TuplesortMethod sortMethod; /* sort algorithm used */ - TuplesortSpaceType spaceType; /* type of space spaceUsed represents */ - int64 spaceUsed; /* space consumption, in kB */ -} TuplesortInstrumentation; - /* * The objects we actually sort are SortTuple structs. These contain * a pointer to the tuple proper (might be a MinimalTuple or IndexTuple), -- 2.39.5
