pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Robert Haas <rhaas@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Consider startup cost as a figure of merit for partial paths.
Date: Mon, 09 Mar 2026 12:29:08 +0000
Message-ID: <E1vzZjQ-0039O6-04@gemulon.postgresql.org> (raw)

Consider startup cost as a figure of merit for partial paths.

Previously, the comments stated that there was no purpose to considering
startup cost for partial paths, but this is not the case: it's perfectly
reasonable to want a fast-start path for a plan that involves a LIMIT
(perhaps over an aggregate, so that there is enough data being processed
to justify parallel query but yet we don't want all the result rows).

Accordingly, rewrite add_partial_path and add_partial_path_precheck to
consider startup costs. This also fixes an independent bug in
add_partial_path_precheck: commit e22253467942fdb100087787c3e1e3a8620c54b2
failed to update it to do anything with the new disabled_nodes field.
That bug fix is formally separate from the rest of this patch and could
be committed separately, but I think it makes more sense to fix both
issues together, because then we can (as this commit does) just make
add_partial_path_precheck do the cost comparisons in the same way as
compare_path_costs_fuzzily, which hopefully reduces the chances of
ending up with something that's still incorrect.

This patch is based on earlier work on this topic by Tomas Vondra,
but I have rewritten a great deal of it.

Co-authored-by: Robert Haas <rhaas@postgresql.org>
Co-authored-by: Tomas Vondra <tomas@vondra.me>
Discussion: http://postgr.es/m/CA+TgmobRufbUSksBoxytGJS1P+mQY4rWctCk-d0iAUO6-k9Wrg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8300d3ad4aa73dc6beec8dca7d9362dbc21c9a83

Modified Files
--------------
src/backend/optimizer/path/joinpath.c          |   3 +
src/backend/optimizer/util/pathnode.c          | 165 +++++++++++++++----------
src/include/optimizer/pathnode.h               |   2 +-
src/test/regress/expected/incremental_sort.out |  28 +++--
src/test/regress/expected/join_hash.out        |  13 +-
src/test/regress/sql/join_hash.sql             |  10 +-
6 files changed, 133 insertions(+), 88 deletions(-)



Message-ID: <E1vzZjQ-0039O6-04@gemulon.postgresql.org>
Permalink:  ../E1vzZjQ-0039O6-04@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1vzZjQ-0039O6-04@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: rhaas@postgresql.org, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Consider startup cost as a figure of merit for partial paths.
  In-Reply-To: <E1vzZjQ-0039O6-04@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