Re: Damage control for planner's get_actual_variable_endpoint() runaway

Robert Haas <robertmhaas@gmail.com>

From: Robert Haas <robertmhaas@gmail.com>
To: Andres Freund <andres@anarazel.de>
Cc: pgsql-hackers@lists.postgresql.org, Jakub Wartak <jakub.wartak@enterprisedb.com>, Tom Lane <tgl@sss.pgh.pa.us>, Simon Riggs <simon.riggs@enterprisedb.com>, Alvaro Herrera <alvherre@alvh.no-ip.org>, PostgreSQL Hackers <pgsql-hackers@postgresql.org>
Date: 2022-11-21T20:55:20Z
Lists: pgsql-hackers
On Mon, Nov 21, 2022 at 1:17 PM Andres Freund <andres@anarazel.de> wrote:
> On November 21, 2022 9:37:34 AM PST, Robert Haas <robertmhaas@gmail.com> wrote:
> >On Mon, Nov 21, 2022 at 12:30 PM Andres Freund <andres@anarazel.de> wrote:
> >> This can't quite be right - isn't this only applying the limit if we found a
> >> visible tuple?
> >
> >It doesn't look that way to me, but perhaps I'm just too dense to see
> >the problem?
>
> The earlier version didn't have the issue, but the latest seems to only limit after a visible tuple has been found. Note the continue; when fetching a heap tuple fails.

Oh, that line was removed in Simon's patch but not in Jakub's version,
I guess. Jakub's version also leaves out the last_block = block line
which seems pretty critical.

-- 
Robert Haas
EDB: http://www.enterprisedb.com



Commits

  1. YA attempt at taming worst-case behavior of get_actual_variable_range.

  2. Improve performance of get_actual_variable_range with recently-dead tuples.

  3. Use SnapshotDirty rather than an active snapshot to probe index endpoints.