Re: pg_plan_advice
Robert Haas <robertmhaas@gmail.com>
Attachments
- v22-0003-Add-an-alternative_root-field-to-PlannerInfo.patch (application/octet-stream) patch v22-0003
- v22-0002-pg_plan_advice-Refactor-to-invent-pgpa_planner_i.patch (application/octet-stream) patch v22-0002
- v22-0004-pg_plan_advice-Invent-DO_NOT_SCAN-relation_ident.patch (application/octet-stream) patch v22-0004
- v22-0001-Respect-disabled_nodes-in-fix_alternative_subpla.patch (application/octet-stream) patch v22-0001
- v22-0005-Add-pg_collect_advice-contrib-module.patch (application/octet-stream) patch v22-0005
- v22-0006-Add-pg_stash_advice-contrib-module.patch (application/octet-stream) patch v22-0006
On Sat, Mar 21, 2026 at 9:13 AM Robert Haas <robertmhaas@gmail.com> wrote: > So I'm left with the idea that to get test_plan_advice to be fully > stable on these slower machines, it will probably be necessary to make > it control which AlternativeSubPlan is chosen and whether a > MinMaxAggPath is chosen or not. I have some ideas about how to > accomplish that in a reasonably elegant fashion without adding too > much new machinery, but I need to spend some more time validating > those ideas before committing to a precise course of action. More > soon. Here is v22. There are four new patches. 0001 adds a disabled_nodes fields to SubPlan, to fix the bug that I identified in the email to which this is a reply. 0002-0004 are an attempt to fix the remaining buildfarm failures not already addressed (or attempted to be addressed, anyway) by other commits. The basic idea, implemented by 0004, is to add a DO_NOT_SCAN() advice tag. This advice is generated when we consider a MinMaxAggPath or a hashed SubPlan. In either case, all relations which are part of the non-selected alternative are marked DO_NOT_SCAN(), which works like scan type advice but disables every possible scan type rather than still allowing exactly one of them. Unless I've missed something, this should be sufficient to make pg_plan_advice stabilize which of two alternative SubPlans we pick and whether or not a min/max aggregate is chosen. 0002 does some preliminary refactoring to provide a more centralized way of tracking per-PlannerInfo details within pg_plan_advice. 0003 makes the necessary change to src/backend/optimizer, which consists of adding an alternative_root field to each PlannerInfo and setting it appropriately. 0004 then updates pg_plan_advice to implement DO_NOT_SCAN(). 0005 is the pg_collect_advice module from previous versions of the patch set. The main change here is that I completely rewrote the TAP test, which previously was running the entire regression test suite yet another time. That's been replaced with something that is much faster and much better targeted at properly testing the shared advice collector. Aside from that, I added one more check for InvalidDsaPointer where the code was previously lacking one. 0006 is the pg_stash_advice module from previous versions of the patch set. I have adjusted this to be much safer against permanent DSA leaks. It now uses dshash_find_or_insert_extended instead of relying on the ability to dshash_find a just-inserted entry without error. It now also holds an LWLock while inserting or updating an entry in the dshash table, for reasons explained in the comments. On the other hand, it no longer unnecessarily holds the LWLock in exclusive mode when looking up advice strings for automatic application, which was a rather silly mistake in the previous version. A few additional tests have been added. Alphabetization in contrib/Makefile has been fixed. -- Robert Haas EDB: http://www.enterprisedb.com
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
pg_plan_advice: Fix another unique-semijoin bug.
- 4321dcad475b 19 (unreleased) landed
-
pg_plan_advice: Export feedback-related definitions.
- c644aca24089 19 (unreleased) landed
-
pg_plan_advice: Fix a bug when a subquery is pruned away entirely.
- 0f93ebb3112d 19 (unreleased) landed
-
pg_plan_advice: Add alternatives test to Makefile.
- 1faf9dfa4796 19 (unreleased) landed
-
pg_plan_advice: Handle non-repeatable TABLESAMPLE scans.
- 3311ccc3d24b 19 (unreleased) landed
-
pg_stash_advice: Allow stashed advice to be persisted to disk.
- c10edb102ada 19 (unreleased) landed
-
Add pg_stash_advice contrib module.
- e8ec19aa321a 19 (unreleased) landed
-
pg_plan_advice: Avoid assertion failure with partitionwise aggregate.
- e2ee95233cab 19 (unreleased) landed
-
pg_plan_advice: Invent DO_NOT_SCAN(relation_identifier).
- 6455e55b0da4 19 (unreleased) landed
-
Add an alternative_plan_name field to PlannerInfo.
- 26255a320733 19 (unreleased) landed
-
pg_plan_advice: Refactor to invent pgpa_planner_info
- 5dcb15e89af2 19 (unreleased) landed
-
Respect disabled_nodes in fix_alternative_subplan.
- 47c110f77e75 19 (unreleased) landed
-
get_memoize_path: Don't exit quickly when PGS_NESTLOOP_PLAIN is unset.
- dc47beacaa0b 19 (unreleased) landed
-
test_plan_advice: Set TAP test priority 50 in meson.build.
- 12444183e401 19 (unreleased) landed
-
pg_plan_advice: Avoid a crash under GEQO.
- 01b02c0ecad1 19 (unreleased) landed
-
Test pg_plan_advice using a new test_plan_advice module.
- e0e4c132ef2b 19 (unreleased) landed
-
pg_plan_advice: Always install pg_plan_advice.h, and in the right place
- 59dcc19b397f 19 (unreleased) landed
-
pg_plan_advice: Fix failures to accept identifier keywords.
- 5e72ce2467c1 19 (unreleased) landed
-
Add pg_plan_advice contrib module.
- 5883ff30b02c 19 (unreleased) landed
-
Allow extensions to mark an individual index as disabled.
- 0fbfd37cefb7 19 (unreleased) landed
-
Replace get_relation_info_hook with build_simple_rel_hook.
- 91f33a2ae92a 19 (unreleased) landed
-
Store information about Append node consolidation in the final plan.
- 7358abcc6076 19 (unreleased) landed
-
Store information about elided nodes in the final plan.
- 0d4391b265f8 19 (unreleased) landed
-
Store information about range-table flattening in the final plan.
- adbad833f3d9 19 (unreleased) landed
-
Pass cursorOptions to planner_setup_hook.
- 0f4c8d33d49d 19 (unreleased) landed
-
Fix PGS_CONSIDER_NONPARTIAL interaction with Materialize nodes.
- cbdf93d47122 19 (unreleased) landed
-
Fix mistakes in commit 4020b370f214315b8c10430301898ac21658143f
- 71c1136989b3 19 (unreleased) landed
-
Allow for plugin control over path generation strategies.
- 4020b370f214 19 (unreleased) landed
-
Update some comments for fasthash
- 7892e2592471 19 (unreleased) landed
-
Allow passing a pointer to GetNamedDSMSegment()'s init callback.
- 48d4a1423d2e 19 (unreleased) cited
-
Don't reset the pathlist of partitioned joinrels.
- 014f9a831a32 19 (unreleased) cited
-
Treat number of disabled nodes in a path as a separate cost metric.
- e22253467942 18.0 cited