Re: [PATCH] Allow parallelism for plpgsql return expression after commit 556f7b7

Поиск
Список
Период
Сортировка
От Dilip Kumar
Тема Re: [PATCH] Allow parallelism for plpgsql return expression after commit 556f7b7
Дата
Msg-id CAFiTN-vEKk1+GoPZmLTK0cb5PDEtYHHr7NJco3DK=ZEa-mMsvA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: [PATCH] Allow parallelism for plpgsql return expression after commit 556f7b7  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Fri, Jul 4, 2025 at 9:56 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
>
> Dilip Kumar <dilipbalaut@gmail.com> writes:
> > On Fri, Jul 4, 2025 at 1:22 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >> There's no initplan in the given test case, so I don't see how
> >> that idea is going to fix it.  Also, allowing initplans to begin
> >> parallelism when the outer query isn't using parallelism seems
> >> like it'd be fraught with problems.  It certainly couldn't be
> >> something we'd back-patch.
>
> > If you see the original problematic case[1] shown by dipesh, where the
> > parallel plan is selected for the initPlan1 but it could not launch
> > the worker because of the below check[2] in ExecutePlan.  So here my
> > concern was that the number of "max tuple" was passed for the top
> > level plan, however the parallelism is restricted for the InitPlan as
> > well.
>
> Oh, looking back, I see that indeed the original example happened to
> produce a plan that involves an initplan.  But there are plenty of
> variants that won't, such as the arguably-more-idiomatic
>
>         return count(*) from test_tab where a between 5.0 and 999999.0;
>
> So I think your emphasis on improving that case is misplaced to start
> with.
>
> > If I understand the code comments correctly, they state that "Parallel
> > mode only supports complete execution of a plan." Given that
> > "InitPlan1" does run to completion, it seems the issue here is that
> > when the top-level plan isn't fully executed, it restricts parallelism
> > for its sub-plans or init-plans, even if those sub-plans are running
> > to completion.
>
> I repeat that I don't think "allow an initplan to run in parallel even
> if the outer query can't" is a particularly sane way to tackle this
> problem.  For starters, ExecutorRun calls EnterParallelMode() and
> ExitParallelMode() globally for the entire query.  We'd have to
> rethink how that works and when it would be safe to call those.
> Using the query-global estate->es_use_parallel_mode flag wouldn't work
> either.  Thought would also be needed about which can't-do-parallelism
> restrictions would be safe to override.  I agree that an outer
> numberTuples restriction needn't be considered, but I'm not sure that
> any others could be ignored.
>
> So on the whole it seems like a research project requiring nontrivial
> effort and probably yielding only marginal gains.  It's certainly not
> going to yield a back-patchable fix for this performance regression.

Yeah that's correct.

--
Regards,
Dilip Kumar
Google



В списке pgsql-hackers по дате отправления: