Hi, I realised a few days ago that the parallel aggregate code does not cost for the combine, serialisation and deserialisation functions at all.
I've attached a patch which fixes this. One small point which I was a little unsure of in the attached is, should the "if (aggref->aggdirectargs)" part of count_agg_clauses_walker() be within the "if (!context->combineStates)". I simply couldn't decide. We currently have no aggregates which this affects anyway, per; select * from pg_aggregate where aggcombinefn <> 0 and aggkind <> 'n'; so for now I've left it outwith. Another thing I thought of is that it's not too nice that I have to pass 3 bools to count_agg_clauses() in order to tell it what to do. I was tempted to invent some bitmask flags for this, then modify create_agg_path() to use the same flags, but I thought I'd better not cause too much churn with this patch. -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
parallel_aggs_costs_fix.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers