From 7d4395d0a11589aa450a073d658c49b420f4493f Mon Sep 17 00:00:00 2001 From: Jeff Davis Date: Thu, 6 Feb 2020 11:49:56 -0800 Subject: Refactor hash_agg_entry_size(). Consolidate the calculations for hash table size estimation. This will help with upcoming Hash Aggregation work that will add additional call sites. --- src/backend/executor/nodeAgg.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) (limited to 'src/backend/executor/nodeAgg.c') diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 9073395eacf..b7f49ceddf8 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -1422,24 +1422,17 @@ find_hash_columns(AggState *aggstate) } /* - * Estimate per-hash-table-entry overhead for the planner. - * - * Note that the estimate does not include space for pass-by-reference - * transition data values, nor for the representative tuple of each group. - * Nor does this account of the target fill-factor and growth policy of the - * hash table. + * Estimate per-hash-table-entry overhead. */ Size -hash_agg_entry_size(int numAggs) +hash_agg_entry_size(int numAggs, Size tupleWidth, Size transitionSpace) { - Size entrysize; - - /* This must match build_hash_table */ - entrysize = sizeof(TupleHashEntryData) + - numAggs * sizeof(AggStatePerGroupData); - entrysize = MAXALIGN(entrysize); - - return entrysize; + return + MAXALIGN(SizeofMinimalTupleHeader) + + MAXALIGN(tupleWidth) + + MAXALIGN(sizeof(TupleHashEntryData) + + numAggs * sizeof(AggStatePerGroupData)) + + transitionSpace; } /* -- cgit v1.2.3