Thread: pgsql: Optimize tuplestore usage for WITH RECURSIVE CTEs
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(-)