Re: WIP: Faster Expression Processing v4
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Tomas Vondra <tomas.vondra@2ndquadrant.com>
Cc: pgsql-hackers@postgresql.org
Date: 2017-03-13T08:03:51Z
Lists: pgsql-hackers
Attachments
Hi, On 2017-03-12 05:40:51 +0100, Tomas Vondra wrote: > I wanted to do a bit of testing and benchmarking on this, but 0004 seems to > be a bit broken. Well, "broken" in the sense that it's already outdated, because other stuff that got merged. > The patch does not apply anymore - there are some conflicts > in execQual.c, but I think I fixed those. But then I ran into a bunch of > compile-time errors, because some of the executor nodes still reference bits > that were moved elsewhere. Updated patch attached. Note that this patch has two changes I've not yet evaluated performance-wise. Questions: - New code calls UpdateDomainConstraintRef at the beginning of expression evaluation, not for each row. That allows to generate "proper programs" for constraint checking, which is quite useful for performance. But it's a behaviour change. - I have *not* changed that, but I'm less than convinced of the pattern of "runtime" get_cached_rowtype calls. Changes: - comments - fix minor bug in BooleanTest brought to ligth thanks to the new regression tests (No, IS TRUE isn't the same IS NOT FALSE) - fix (theoretical?) issue with get_cached_rowtype() being called once for deforming and once for forming a tuple for FieldStores. - fixed/implemented an optimization XXX around bool AND/OR because the solution actually makes the code easier. What's basically missing here is: - pgindent run and minimizing resulting damage - A higher level explanation of how the interpreted expression evaluation works. This patch implements "fairly standard" approach, but it's imo sufficiently - There's one remaining FIXME that needs to be fixed. - I sometimes see a minor performance regression (~1.2%) in tpch-h's Q17 that might or might not be code layout related. - continue pass to ensure all worthwhile comments from execQual.c are retained. Could be delayed: - add regression tests for track_functions - I've manually verified it works, and we previously didn't have tests either. Greetings, Andres Freund
Commits
-
Improve performance of ExecEvalWholeRowVar.
- 2f0903ea1965 10.0 landed
-
Remove unreachable code in expression evaluation.
- ad46a2aa79f9 10.0 landed
-
Faster expression evaluation and targetlist projection.
- b8d7f053c5c2 10.0 landed
-
Avoid syntax error on platforms that have neither LOCALE_T nor ICU.
- 457a44487328 10.0 cited
-
Add configure test to see if the C compiler has gcc-style computed gotos.
- bc18126a6bcb 10.0 landed
-
Improve regression test coverage for TID scanning.
- be6c3d19fd45 10.0 landed
-
Improve expression evaluation test coverage.
- ce38949ba23a 10.0 landed
-
Fix two errors with nested CASE/WHEN constructs.
- f0c7b789ab12 9.6.0 cited