Re: Defer selection of asynchronous subplans until the executor initialization stage
Etsuro Fujita <etsuro.fujita@gmail.com>
From: Etsuro Fujita <etsuro.fujita@gmail.com>
To: Zhihong Yu <zyu@yugabyte.com>
Cc: Justin Pryzby <pryzby@telsasoft.com>,
Alexander Pyhalov <a.pyhalov@postgrespro.ru>, "Andrey V. Lepikhov" <a.lepikhov@postgrespro.ru>,
Kyotaro Horiguchi <horikyota.ntt@gmail.com>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2022-04-19T09:01:33Z
Lists: pgsql-hackers
Hi, On Sun, Apr 17, 2022 at 7:30 PM Zhihong Yu <zyu@yugabyte.com> wrote: > On Sun, Apr 17, 2022 at 1:48 AM Etsuro Fujita <etsuro.fujita@gmail.com> wrote: >> I think we might support more cases in the switch statement in the >> future. My concern about your proposal is that it might make it hard >> to add new cases to the statement. I agree that what I proposed has a >> bit of redundant code, but writing code inside each case independently >> would make it easy to add them, making code consistent across branches >> and thus making back-patching easy. > When a new case arises where the plan is not a Result node, this func can be rewritten. > If there is only one such new case, the check at the beginning of the func can be tuned to exclude that case. Sorry, I don't agree with you. > I still think the check should be lifted to the beginning of the func (given the current cases). The given path isn't limited to SubqueryScanPath, ForeignPath and ProjectionPath, so another concern is extra cycles needed when the path is other path type that is projection-capable (e.g., Path for sequential scan, IndexPath, NestPath, ...). Assume that the given path is a Path (that doesn't contain pseudoconstant quals). In that case the given SeqScan plan node wouldn't contain a gating Result node, so if we put the if test at the top of the function, we need to execute not only the test but the switch statement for the given path/plan nodes. But if we put the if test inside each case block, we only need to execute the switch statement, without executing the test. In the latter case I think we can save cycles for normal cases. In short: I don't think it's a great idea to put the if test at the top of the function. Best regards, Etsuro Fujita
Commits
-
Improve comments for trivial_subqueryscan().
- 4a8a5dd7f59c 15.0 landed
-
Disable asynchronous execution if using gating Result nodes.
- ebb790241523 14.3 landed
- 5c854e7a2c8a 15.0 landed
-
Allow asynchronous execution in more cases.
- c2bb02bc2e85 15.0 landed
-
Doc: Further update documentation for asynchronous execution.
- eab81953682d 14.0 landed
-
Fix rescanning of async-aware Append nodes.
- f3baaf28a6da 14.0 landed
-
Doc: Update documentation for asynchronous execution.
- 15fcd33e0694 14.0 landed
-
Fix EXPLAIN ANALYZE for async-capable nodes.
- a363bc6da96b 14.0 landed
-
Minor code cleanup in asynchronous execution support.
- bb684c82f733 14.0 landed
-
Adjust input value to WaitEventSetWait() in ExecAppendAsyncEventWait().
- a8af856d3257 14.0 landed
-
Add support for asynchronous execution.
- 27e1f14563cf 14.0 landed