Re: Hybrid Hash/Nested Loop joins and caching results from subplans
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: David Rowley <dgrowleyml@gmail.com>, Konstantin Knizhnik <k.knizhnik@postgrespro.ru>, Andy Fan <zhihui.fan1213@gmail.com>, Alvaro Herrera <alvherre@alvh.no-ip.org>, PostgreSQL Developers <pgsql-hackers@lists.postgresql.org>
Date: 2021-02-23T02:01:05Z
Lists: pgsql-hackers
Hi, On 2021-02-22 20:51:17 -0500, Tom Lane wrote: > Andres Freund <andres@anarazel.de> writes: > > Except for the annoying issue that that we pervasively use Lists as > > expressions, I'd argue that we should actually cache "subtree > > volatility" in Expr nodes, similar to the way we use OpExpr.opfuncid > > etc. That'd allow us to make contain_volatile_functions() very cheap > > ... and completely break changing volatility with ALTER FUNCTION. > The case of OpExpr.opfuncid is okay only because we don't provide > a way to switch an operator's underlying function. (See also > 9f1255ac8.) Hm. I was imagining we'd only set it within the planner. If so, I don't think it'd change anything around ALTER FUNCTION. But anyway, due to the List* issue, I don't think it's a viable approach as-is anyway. We could add a wrapper node around "planner expressions" that stores metadata about them during planning, without those properties leaking over expressions used at other times. E.g. having preprocess_expression() return a PlannerExpr that that points to the expression as preprocess_expression returns it today. That'd make it easy to cache information like volatility. But it also seems prohibitively invasive :(. > It'd certainly be desirable to reduce the number of duplicated > function property lookups in the planner, but I'm not convinced > that that is a good way to go about it. Do you have suggestions? Greetings, Andres Freund
Commits
-
Add Result Cache executor node (take 2)
- 9eacee2e62d8 14.0 landed
-
Add Result Cache executor node
- b6002a796dc0 14.0 landed
-
Allow estimate_num_groups() to pass back further details about the estimation
- ed934d4fa30f 14.0 landed
-
Allow users of simplehash.h to perform direct deletions
- ff53d7b159b9 14.0 landed
-
Cache if PathTarget and RestrictInfos contain volatile functions
- f58b230ed0db 14.0 landed
-
Fix pull_varnos' miscomputation of relids set for a PlaceHolderVar.
- 55dc86eca70b 14.0 cited