I have applied 0002 and 0004, which are the straightforward ones. I decided not to pursue 0003 because I think a much better idea is to remove the inclusion of tupconvert.h in execnodes.h.
Here's 0001 again. I mentioned a possible move of a few instrumentation structs from elsewhere into the new file, just so that they're all together in one place. The new 0002 here does that, but I'm feeling quite unsure about it. -- Álvaro Herrera Breisgau, Deutschland — https://www.EnterpriseDB.com/ "Uno puede defenderse de los ataques; contra los elogios se esta indefenso"
>From 101e6db9f33378da784fd74bc8cea841454adeb4 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 v2 1/2] Remove brin/gin_tuple.h from tuplesort.h Because execnodes.h depends on struct definitions that were in genam.h, which it no longer gets because of the aforementioned removal, split those struct definitions to a separate header file. --- contrib/bloom/blscan.c | 1 + contrib/pageinspect/gistfuncs.c | 1 + src/backend/access/gin/gininsert.c | 3 +- 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_attrdef.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 | 64 ++++++++++++++++++++++ src/include/nodes/execnodes.h | 29 +--------- src/include/utils/tuplesort.h | 6 +- 18 files changed, 86 insertions(+), 52 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/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 e9d4b27427e..43c007b6204 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -29,10 +29,11 @@ #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" +#include "utils/typcache.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 387d9972345..aa56ef430a9 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 d69798795b4..5c6dc3b183e 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_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/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 b409d4ecbf5..ab585aa9819 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 9d95c7140ee..72625a94dcc 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 f59046ad620..85f55b75c66 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 1db6a7f784c..4e8efcdf55b 100644 --- a/src/backend/statistics/attribute_stats.c +++ b/src/backend/statistics/attribute_stats.c @@ -29,6 +29,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..8937ebbcf21 --- /dev/null +++ b/src/include/executor/instrument_node.h @@ -0,0 +1,64 @@ +/*------------------------------------------------------------------------- + * + * 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 + + +/* + * 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; + +#endif /* INSTRUMENT_NODE_H */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index a36653c37f9..857488c56fc 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -29,8 +29,10 @@ #ifndef EXECNODES_H #define EXECNODES_H +#include "access/skey.h" #include "access/tupconvert.h" #include "executor/instrument.h" +#include "executor/instrument_node.h" #include "fmgr.h" #include "lib/ilist.h" #include "lib/pairingheap.h" @@ -1810,19 +1812,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 * @@ -1859,20 +1848,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 * diff --git a/src/include/utils/tuplesort.h b/src/include/utils/tuplesort.h index ef79f259f93..8278beea5ec 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/tuptable.h" #include "storage/dsm.h" @@ -31,6 +29,10 @@ #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 * known outside tuplesort.c. -- 2.47.3
>From f64e65892e264a42648318686f06ad3adf0c3c22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Herrera?= <[email protected]> Date: Sun, 5 Oct 2025 19:22:13 +0200 Subject: [PATCH v2 2/2] move some other structs into instrument_node.h --- src/backend/utils/sort/tuplesort.c | 1 + src/include/executor/instrument_node.h | 145 +++++++++++++++++++++++++ src/include/nodes/execnodes.h | 108 ------------------ src/include/utils/tuplesort.h | 36 +----- 4 files changed, 147 insertions(+), 143 deletions(-) diff --git a/src/backend/utils/sort/tuplesort.c b/src/backend/utils/sort/tuplesort.c index 5d4411dc33f..dee5e13ab0e 100644 --- a/src/backend/utils/sort/tuplesort.c +++ b/src/backend/utils/sort/tuplesort.c @@ -102,6 +102,7 @@ #include <limits.h> #include "commands/tablespace.h" +#include "executor/instrument_node.h" #include "miscadmin.h" #include "pg_trace.h" #include "storage/shmem.h" diff --git a/src/include/executor/instrument_node.h b/src/include/executor/instrument_node.h index 8937ebbcf21..a05616f44da 100644 --- a/src/include/executor/instrument_node.h +++ b/src/include/executor/instrument_node.h @@ -61,4 +61,149 @@ typedef struct SharedBitmapHeapInstrumentation BitmapHeapScanInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER]; } SharedBitmapHeapInstrumentation; +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; + +/* + * Data structures for reporting sort statistics. Note that + * TuplesortInstrumentation can't contain any pointers because we + * sometimes put it in shared memory. + * + * The parallel-sort infrastructure relies on having a zero TuplesortMethod + * to indicate that a worker never did anything, so we assign zero to + * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be + * OR'ed together to represent a situation where different workers used + * 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; + +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; + +/* ---------------- + * 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; + +/* --------------------- + * 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; + +/* ---------------- + * 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; + #endif /* INSTRUMENT_NODE_H */ diff --git a/src/include/nodes/execnodes.h b/src/include/nodes/execnodes.h index 857488c56fc..1b46dd0dbeb 100644 --- a/src/include/nodes/execnodes.h +++ b/src/include/nodes/execnodes.h @@ -2272,31 +2272,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 * @@ -2352,16 +2327,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 * ---------------- @@ -2381,35 +2346,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 @@ -2457,27 +2393,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 * @@ -2754,29 +2669,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 8278beea5ec..c47d7cdfc75 100644 --- a/src/include/utils/tuplesort.h +++ b/src/include/utils/tuplesort.h @@ -22,6 +22,7 @@ #define TUPLESORT_H #include "access/itup.h" +#include "executor/instrument_node.h" #include "executor/tuptable.h" #include "storage/dsm.h" #include "utils/logtape.h" @@ -63,35 +64,6 @@ typedef struct SortCoordinateData typedef struct SortCoordinateData *SortCoordinate; -/* - * Data structures for reporting sort statistics. Note that - * TuplesortInstrumentation can't contain any pointers because we - * sometimes put it in shared memory. - * - * The parallel-sort infrastructure relies on having a zero TuplesortMethod - * to indicate that a worker never did anything, so we assign zero to - * SORT_TYPE_STILL_IN_PROGRESS. The other values of this enum can be - * OR'ed together to represent a situation where different workers used - * 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 @@ -110,12 +82,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 -- 2.47.3
