Re: Defer selection of asynchronous subplans until the executor initialization stage

Zhihong Yu <zyu@yugabyte.com>

From: Zhihong Yu <zyu@yugabyte.com>
To: Etsuro Fujita <etsuro.fujita@gmail.com>
Cc: Alexander Pyhalov <a.pyhalov@postgrespro.ru>, "Andrey V. Lepikhov" <a.lepikhov@postgrespro.ru>, Kyotaro Horiguchi <horikyota.ntt@gmail.com>, Justin Pryzby <pryzby@telsasoft.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2022-04-03T14:42:37Z
Lists: pgsql-hackers
On Sun, Apr 3, 2022 at 3:28 AM Etsuro Fujita <etsuro.fujita@gmail.com>
wrote:

> On Sun, Mar 13, 2022 at 6:39 PM Etsuro Fujita <etsuro.fujita@gmail.com>
> wrote:
> > On Wed, Sep 15, 2021 at 3:40 PM Alexander Pyhalov
> > <a.pyhalov@postgrespro.ru> wrote:
> > > The patch looks good to me and seems to work as expected.
> >
> > I’m planning to commit the patch.
>
> I polished the patch a bit:
>
> * Reordered a bit of code in create_append_plan() in logical order (no
> functional changes).
> * Added more comments.
> * Added/Tweaked regression test cases.
>
> Also, I added the commit message.  Attached is a new version of the
> patch.  Barring objections, I’ll commit this.
>
> Best regards,
> Etsuro Fujita
>
Hi,

+   WRITE_ENUM_FIELD(status, SubqueryScanStatus);

Looks like the new field can be named subquerystatus - this way its purpose
is clearer.

+ * mark_async_capable_plan
+ *     Check whether a given Path node is async-capable, and if so, mark
the
+ *     Plan node created from it as such.

Please add comment explaining what the return value means.

+           if (!IsA(plan, Result) &&
+               mark_async_capable_plan(plan,
+                                       ((ProjectionPath *) path)->subpath))
+               return true;

by returning true, `plan->async_capable = true;` is skipped.
Is that intentional ?

Cheers

Commits

  1. Improve comments for trivial_subqueryscan().

  2. Disable asynchronous execution if using gating Result nodes.

  3. Allow asynchronous execution in more cases.

  4. Doc: Further update documentation for asynchronous execution.

  5. Fix rescanning of async-aware Append nodes.

  6. Doc: Update documentation for asynchronous execution.

  7. Fix EXPLAIN ANALYZE for async-capable nodes.

  8. Minor code cleanup in asynchronous execution support.

  9. Adjust input value to WaitEventSetWait() in ExecAppendAsyncEventWait().

  10. Add support for asynchronous execution.