| From: | Amit Langote <amitlangote09(at)gmail(dot)com> |
|---|---|
| To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
| Cc: | Tender Wang <tndrwang(at)gmail(dot)com>, Alexander Lakhin <exclusion(at)gmail(dot)com>, Tomas Vondra <tomas(at)vondra(dot)me>, Robert Haas <robertmhaas(at)gmail(dot)com>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, Andres Freund <andres(at)anarazel(dot)de>, Daniel Gustafsson <daniel(at)yesql(dot)se>, David Rowley <dgrowleyml(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, Thom Brown <thom(at)linux(dot)com> |
| Subject: | Re: generic plans and "initial" pruning |
| Date: | 2025-11-20 07:30:26 |
| Message-ID: | CA+HiwqGJP91Qed0EjuB72Lv4_QAiVOMYjya7GA0aas8K6NZUZA@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
On Mon, Nov 17, 2025 at 9:50 PM Amit Langote <amitlangote09(at)gmail(dot)com> wrote:
> On Wed, Nov 12, 2025 at 11:17 PM Amit Langote <amitlangote09(at)gmail(dot)com> wrote:
> > * Enable pruning-aware locking in cached / generic plan reuse (0004):
> > extends GetCachedPlan() and CheckCachedPlan() to call ExecutorPrep()
> > on each PlannedStmt in the CachedPlan, locking only surviving
> > partitions. Adds CachedPlanPrepData to pass this through plan cache
> > APIs and down to execution via QueryDesc. Also reinstates the
> > firstResultRel locking rule added in 28317de72 but later lost due to
> > revert of the earlier pruning patch, to ensure correctness when all
> > target partitions are pruned.
>
> Looking at the changes to executor/function.c, I also noticed that I
> had mistakenly allocated the ExecutorPrep state in
> SQLFunctionCache.fcontext whereas the correct context for execution
> related state is SQLFunctionCache.subcontext. In the updated patch,
> I've made postquel_start() reparent the prep EState's es_query_cxt to
> subcontext from fcontext. I also did not have a test case that
> exercised cached plan reuse for SQL functions, so I added one. I split
> the function.c's GetCachedPlan() + CachedPlanPrepData plumbing into a
> new patch 0005 so it can be reviewed separately, since it is the only
> non-mechanical call-site change.
I also noticed a bug in the prep cleanup logic that runs when a cached
plan becomes invalid during the prep phase. Patch 0005 fixes that and
adds a regression test that exercises the invalidation path. This will
be folded into 0004 later.
--
Thanks, Amit Langote
| Attachment | Content-Type | Size |
|---|---|---|
| v3-0004-Use-pruning-aware-locking-in-cached-plans.patch | application/octet-stream | 24.5 KB |
| v3-0005-Add-test-exercising-prep-cleanup-on-cached-plan-i.patch | application/octet-stream | 9.3 KB |
| v3-0002-Introduce-ExecutorPrep-and-refactor-executor-star.patch | application/octet-stream | 28.7 KB |
| v3-0006-Make-SQL-function-executor-track-ExecutorPrep-sta.patch | application/octet-stream | 6.7 KB |
| v3-0003-Reuse-partition-pruning-results-in-parallel-worke.patch | application/octet-stream | 9.1 KB |
| v3-0001-Refactor-partition-pruning-initialization-for-cla.patch | application/octet-stream | 7.7 KB |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Chao Li | 2025-11-20 07:33:48 | Re: Row pattern recognition |
| Previous Message | BharatDB | 2025-11-20 07:30:06 | [PATCH] Expose checkpoint timestamp and duration in pg_stat_checkpointer |