Re: generic plans and "initial" pruning
Alvaro Herrera <alvherre@alvh.no-ip.org>
On 2022-Dec-09, Amit Langote wrote: > On Fri, Dec 9, 2022 at 6:52 PM Alvaro Herrera <alvherre@alvh.no-ip.org> wrote: > > Remind me again why is part_prune_results_list not part of struct > > CachedPlan then? I tried to understand that based on comments upthread, > > but I was unable to find anything. > > It used to be part of CachedPlan for a brief period of time (in patch > v12 I posted in [1]), but David, in his reply to [1], said he wasn't > so sure that it belonged there. I'm not sure I necessarily agree with that. I'll have a look at v12 to try and understand what was David so unhappy about. > > (My first reaction to your above comment was "well, rename GetCachedPlan > > then, maybe to GetRunnablePlan", but then I'm wondering if CachedPlan is > > in any way a structure that must be "immutable" in the way parser output > > is. Looking at the comment at the top of plancache.c it appears to me > > that it isn't, but maybe I'm missing something.) > > CachedPlan *is* supposed to be read-only per the comment above > CachedPlanSource definition: > > * ...If we are using a generic > * cached plan then it is meant to be re-used across multiple executions, so > * callers must always treat CachedPlans as read-only. I read that as implying that the part_prune_results_list must remain intact as long as no invalidations occur. Does part_prune_result_list really change as a result of something other than a sinval event? Keep in mind that if a sinval message that touches one of the relations in the plan arrives, then we'll discard it and generate it afresh. I don't see that the part_prune_results_list would change otherwise, but maybe I misunderstand? > FYI, there was even an idea of putting a PartitionPruneResults for a > given PlannedStmt into the PlannedStmt itself [2], but PlannedStmt is > supposed to be read-only too [3]. Hmm, I'm not familiar with PlannedStmt lifetime, but I'm definitely not betting that Tom is wrong about this. > Maybe we need some new overarching context when invoking plancache, if > Portal can't already be it, whose struct can be passed to > GetCachedPlan() to put the pruning results in? Perhaps, > GetRunnablePlan() that you floated could be a wrapper for > GetCachedPlan(), owning that new context. Perhaps that is a solution. I'm not sure. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/ "Uno puede defenderse de los ataques; contra los elogios se esta indefenso"
Commits
-
Stamp 19beta1.
- 4b0bf0788b06 19 (unreleased) cited
-
Revert "Don't lock partitions pruned by initial pruning"
- 1722d5eb05d8 18.0 landed
-
Ensure first ModifyTable rel initialized if all are pruned
- 28317de723b6 18.0 cited
-
Fix bug in cbc127917 to handle nested Append correctly
- cbb9086c9ef6 18.0 landed
-
Remove unstable test suite added by 525392d57
- 4f1b6e5bb4fe 18.0 landed
-
Don't lock partitions pruned by initial pruning
- 525392d5727f 18.0 landed
-
Fix an oversight in cbc127917 to handle MERGE correctly
- 75dfde13639a 18.0 landed
-
Track unpruned relids to avoid processing pruned relations
- cbc127917e04 18.0 landed
-
Perform runtime initial pruning outside ExecInitNode()
- d47cbf474ecb 18.0 landed
-
Move PartitionPruneInfo out of plan nodes into PlannedStmt
- bb3ec16e14de 18.0 landed
-
Fix setrefs.c's failure to do expression processing on prune steps.
- bf826ea06297 18.0 cited
-
Remove obsolete executor cleanup code
- d060e921ea5a 17.0 landed
-
Revert "Move PartitionPruneInfo out of plan nodes into PlannedStmt"
- 5472743d9e85 16.0 landed
-
Move PartitioPruneInfo out of plan nodes into PlannedStmt
- ec386948948c 16.0 landed
-
Refactor and cleanup runtime partition prune code a little
- 297daa9d4353 15.0 landed
-
Remove some unnecessary fields from Plan trees.
- 52ed730d511b 12.0 cited
-
Remove more redundant relation locking during executor startup.
- f2343653f5b2 12.0 cited
-
Shut down Gather's children before shutting down Gather itself.
- acf555bc53ac 10.0 cited