pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: David Rowley <drowley@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Optimize tuplestore usage for WITH RECURSIVE CTEs
Date: Thu, 19 Sep 2024 03:21:07 +0000
Message-ID: <E1sr7j9-001jEp-0o@gemulon.postgresql.org> (raw)

Optimize tuplestore usage for WITH RECURSIVE CTEs

nodeRecursiveunion.c makes use of two tuplestores and, until now, would
delete and recreate one of these tuplestores after every recursive
iteration.

Here we adjust that behavior and instead reuse one of the existing
tuplestores and just empty it of all tuples using tuplestore_clear().

This saves some free/malloc roundtrips and has shown a 25-30% performance
improvement for queries that perform very little work between recursive
iterations.

This also paves the way to add some EXPLAIN ANALYZE telemetry output for
recursive common table expressions, similar to what was done in 1eff8279d
and 95d6e9af0.  Previously calling tuplestore_end() would have caused
the maximum storage space used to be lost.

Reviewed-by: Tatsuo Ishii
Discussion: https://postgr.es/m/CAApHDvr9yW0YRiK8A2J7nvyT8g17YzbSfOviEWrghazKZbHbig@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/5d56d07ca343a467ce74a042c22c963ea2690eaf

Modified Files
--------------
src/backend/executor/nodeRecursiveunion.c | 19 +++++++++++++------
1 file changed, 13 insertions(+), 6 deletions(-)



Message-ID: <E1sr7j9-001jEp-0o@gemulon.postgresql.org>
Permalink:  ../E1sr7j9-001jEp-0o@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1sr7j9-001jEp-0o@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: drowley@postgresql.org, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Optimize tuplestore usage for WITH RECURSIVE CTEs
  In-Reply-To: <E1sr7j9-001jEp-0o@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox