Re: PG 15 (and to a smaller degree 14) regression due to ExprEvalStep size
David Rowley <dgrowleyml@gmail.com>
Attachments
- v3-0001-Remove-size-increase-in-ExprEvalStep-caused-by-ha.patch (text/plain) patch v3-0001
On Sat, 18 Jun 2022 at 08:06, Andres Freund <andres@anarazel.de> wrote: > I also attached my heavily-WIP patches for the ExprEvalStep issues, I > accidentally had only included a small part of the contents of the json fix. I've now looked at the 0003 patch. I like the idea you have about moving some of the additional fields into ScalarArrayOpExprHashTable. I think the patch can even go a little further and move the hash_finfo into there too. This means we don't need to dereference the "op" in saop_element_hash(). To make this work, I did need to tag the ScalarArrayOpExpr into the ExprEvalStep. That's required now since some of the initialization of the hash function fields is delayed until ExecEvalHashedScalarArrayOp(). We need to know the ScalarArrayOpExpr's hashfuncid and inputcollid. Your v2 patch did shift off some of this initialization work to ExecEvalHashedScalarArrayOp(). The attached v3 takes that a bit further. This saves a bit more work for ScalarArrayOpExprs that are evaluated 0 times. Another small thing which I considered doing was to put the hash_fcinfo_data field as the final field in ScalarArrayOpExprHashTable so that we could allocate the memory for the hash_fcinfo_data in the same allocation as the ScalarArrayOpExprHashTable. This would reduce the pointer dereferencing done in saop_element_hash() a bit further. I just didn't notice anywhere else where we do that for FunctionCallInfo, so I resisted doing this. (There was also a small bug in your patch where you mistakenly cast to an OpExpr instead of ScalarArrayOpExpr when you were fetching the inputcollid) David
Commits
-
JSON_TABLE: Add support for NESTED paths and columns
- bb766cde63b4 17.0 landed
-
Add basic JSON_TABLE() functionality
- de3600452b61 17.0 landed
-
Add SQL/JSON query functions
- 6185c9737cf4 17.0 landed
-
Add soft error handling to some expression nodes
- aaaf9449ec6b 17.0 landed
-
Adjust populate_record_field() to handle errors softly
- 1edb3b491bee 17.0 landed
-
Refactor code used by jsonpath executor to fetch variables
- faa2b953ba3b 17.0 landed
-
Add more SQL/JSON constructor functions
- 03734a7fed7d 17.0 landed
-
SQL/JSON: support the IS JSON predicate
- 6ee30209a6f1 16.0 landed
-
SQL/JSON: add standard JSON constructor functions
- 7081ac46ace8 16.0 landed
-
Add static assertion ensuring sizeof(ExprEvalStep) <= 64 bytes
- 78be04e4c672 16.0 landed
-
Remove size increase in ExprEvalStep caused by hashed saops
- 30efc3b5a364 15.0 landed
- fe3caa143937 16.0 landed
-
pgstat: reduce timer overhead by leaving timer running.
- 4a37527fde3c 15.0 landed
- 056cc366fafa 16.0 landed
-
expression eval: Fix EEOP_JSON_CONSTRUCTOR and EEOP_JSONEXPR size.
- 5a1ab894f758 15.0 landed
- 67b26703b415 16.0 landed
-
SQL/JSON query functions
- 1a36bc9dba8e 15.0 cited
-
Speedup ScalarArrayOpExpr evaluation
- 50e17ad281b8 14.0 cited