Re: generic plans and "initial" pruning
Robert Haas <robertmhaas@gmail.com>
On Mon, Aug 12, 2024 at 8:54 AM Amit Langote <amitlangote09@gmail.com> wrote: > 1. I went through many iterations of the changes to ExecInitNode() to > return a partially initialized PlanState tree when it detects that the > CachedPlan was invalidated after locking a child table and to > ExecEndNode() to account for the PlanState tree sometimes being > partially initialized, but it still seems fragile and bug-prone to me. > It might be because this approach is fundamentally hard to get right > or I haven't invested enough effort in becoming more confident in its > robustness. Can you give some examples of what's going wrong, or what you think might go wrong? I didn't think there was a huge problem here based on previous discussion, but I could very well be missing some important challenge. > 2. Refactoring needed due to the ExecutorStart() API change especially > that pertaining to portals does not seem airtight. I'm especially > worried about moving the ExecutorStart() call for the > PORTAL_MULTI_QUERY case from where it is currently to PortalStart(). > That requires additional bookkeeping in PortalData and I am not > totally sure that the snapshot handling changes after that move are > entirely correct. Here again, it would help to see exactly what you had to do and what consequences you think it might have. But it sounds like you're talking about moving ExecutorStart() from PortalStart() to PortalRun() and I agree that sounds like it might have user-visible behavioral consequences that we don't want. > 3. The need to add *back* the fields to store the RT indexes of > relations that are not looked at by ExecInitNode() traversal such as > root partitioned tables and non-leaf partitions. I don't remember exactly why we removed those or what the benefit was, so I'm not sure how big of a problem it is if we have to put them back. > About #1, I tend to agree with David that adding complexity around > PlanState tree construction may not be a good idea, because we might > want to rethink Plan initialization code and data structures in the > not too distant future. Like Tom, I don't really buy this. There might be a good reason not to do this in ExecutorStart(), but the hypothetical possibility that we might want to change something and that this patch might make it harder is not it. -- Robert Haas EDB: http://www.enterprisedb.com
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