pgsql: expression eval: Reduce number of steps for agg transition invoc

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: expression eval: Reduce number of steps for agg transition invoc
Date: 2020-02-24 23:27:30
Message-ID: E1j6N8M-0004UO-9v@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

expression eval: Reduce number of steps for agg transition invocations.

Do so by combining the various steps that are part of aggregate
transition function invocation into one larger step. As some of the
current steps are only necessary for some aggregates, have one variant
of the aggregate transition step for each possible combination.

To avoid further manual copies of code in the different transition
step implementations, move most of the code into helper functions
marked as "always inline".

The benefit of this change is an increase in performance when
aggregating lots of rows. This comes in part due to the reduced number
of indirect jumps due to the reduced number of steps, and in part by
reducing redundant setup code across steps. This mainly benefits
interpreted execution, but the code generated by JIT is also improved
a bit.

As a nice side-effect it also ends up making the code a bit simpler.

A small additional optimization is removing the need to set
aggstate->curaggcontext before calling ExecAggInitGroup, choosing to
instead passign curaggcontext as an argument. It was, in contrast to
other aggregate related functions, only needed to fetch a memory
context to copy the transition value into.

Author: Andres Freund
Discussion:
https://postgr.es/m/20191023163849.sosqbfs5yenocez3@alap3.anarazel.de
https://postgr.es/m/5c371df7cee903e8cd4c685f90c6c72086d3a2dc.camel@j-davis.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/2742c45080077ed3b08b810bb96341499b86d530

Modified Files
--------------
src/backend/executor/execExpr.c | 105 ++++++------
src/backend/executor/execExprInterp.c | 307 +++++++++++++++++++++-------------
src/backend/executor/nodeAgg.c | 5 +-
src/backend/jit/llvm/llvmjit_expr.c | 229 +++++++++----------------
src/include/executor/execExpr.h | 34 +---
5 files changed, 332 insertions(+), 348 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2020-02-24 23:43:48 pgsql: Fix compile failure.
Previous Message Michael Paquier 2020-02-24 22:55:58 pgsql: Issue properly WAL record for CID of first catalog tuple in mult