diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2005-01-28 19:36:33 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2005-01-28 19:36:33 +0000 |
commit | a098f533d15efe5552c0b6cd661cc123231c8c54 (patch) | |
tree | ebe55a8f91b584c66805ad50600647a1a756d2c4 /src/backend/executor/nodeAgg.c | |
parent | af5cd5ba92036f07f8414b15ec96da096ded8d7e (diff) | |
download | postgresql-a098f533d15efe5552c0b6cd661cc123231c8c54.tar.gz postgresql-a098f533d15efe5552c0b6cd661cc123231c8c54.zip |
Improve planner's estimation of the space needed for HashAgg plans:
look at the actual aggregate transition datatypes and the actual overhead
needed by nodeAgg.c, instead of using pessimistic round numbers.
Per a discussion with Michael Tiemann.
Diffstat (limited to 'src/backend/executor/nodeAgg.c')
-rw-r--r-- | src/backend/executor/nodeAgg.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/backend/executor/nodeAgg.c b/src/backend/executor/nodeAgg.c index 97e30b7e58f..d19b3f65185 100644 --- a/src/backend/executor/nodeAgg.c +++ b/src/backend/executor/nodeAgg.c @@ -45,7 +45,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.126.4.1 2005/01/27 23:42:44 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/executor/nodeAgg.c,v 1.126.4.2 2005/01/28 19:35:56 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -605,6 +605,26 @@ build_hash_table(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. + */ +Size +hash_agg_entry_size(int numAggs) +{ + Size entrysize; + + /* This must match build_hash_table */ + entrysize = sizeof(AggHashEntryData) + + (numAggs - 1) *sizeof(AggStatePerGroupData); + /* Account for hashtable overhead */ + entrysize += 2 * sizeof(void *); + entrysize = MAXALIGN(entrysize); + return entrysize; +} + +/* * Find or create a hashtable entry for the tuple group containing the * given tuple. * |