Re: Performance issue in foreign-key-aware join estimation
David Rowley <david.rowley@2ndquadrant.com>
From: David Rowley <david.rowley@2ndquadrant.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>, Tomas Vondra <tomas.vondra@2ndquadrant.com>
Date: 2019-02-05T09:43:54Z
Lists: pgsql-hackers
On Sat, 22 Dec 2018 at 09:28, David Rowley <david.rowley@2ndquadrant.com> wrote: > > On Fri, 21 Dec 2018 at 06:44, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > I was distressed to discover via perf that 69% of the runtime of this > > test now goes into match_eclasses_to_foreign_key_col(). That seems > > clearly unacceptable. > > Agreed. That's pretty terrible. > > I looked at this a bit and see that > match_eclasses_to_foreign_key_col() is missing any smarts to skip > equivalence classes that don't have ec_relids bits for both rels. With > that added the run-time is reduced pretty dramatically. > > I've only tested with a debug build as of now, but I get: > > Unpatched: > > $ pgbench -n -T 60 -f query.sql postgres > latency average = 18411.604 ms > > Patched: > latency average = 8748.177 ms So that this does not get lost, I've added an entry for the original patch for the March commitfest. While the patch does not bring the performance back to what it was before this code was added, it makes a massive dent in the additional overhead. https://commitfest.postgresql.org/22/1984/ -- David Rowley http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
Commits
-
Adjust overly strict Assert
- e1a0f6a98306 13.0 landed
-
Speed up finding EquivalenceClasses for a given set of rels
- 3373c7155350 13.0 landed
-
Speed up match_eclasses_to_foreign_key_col() when there are many ECs.
- fa86238f1eac 12.0 landed
- e22bfe94e4df 11.3 landed
- affee8b14c68 10.8 landed
- 09c9dd39efea 9.6.13 landed