]> granicus.if.org Git - postgresql/commit
Reduce initial size of RelfilenodeMapHash.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 12 May 2017 22:30:02 +0000 (18:30 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 12 May 2017 22:30:02 +0000 (18:30 -0400)
commitf7d0a31ce94e78d8e69a5e2cc8ae44344d85f9db
treed7e42f3084172ad38a835a3e709fba195217b302
parentb7a98b14c35390eff80bb094ae41d62f03916920
Reduce initial size of RelfilenodeMapHash.

A test case provided by Mathieu Fenniak shows that hash_seq_search'ing
this hashtable can consume a very significant amount of overhead during
logical decoding, which triggers frequent cache invalidation.  Testing
suggests that the actual population of the hashtable is often no more
than a few dozen entries, so we can cut the overhead just by dropping
the initial number of buckets down from 1024 --- I chose to cut it to 64.
(In situations where we do have a significant number of entries, we
shouldn't get any real penalty from doing this, as the dynahash.c code
will resize the hashtable automatically.)

This gives a further factor-of-two savings in Mathieu's test case.
That may be overly optimistic for real-world benefit, as real cases
may have larger average table populations, but it's hard to see it
turning into a net negative for any workload.

Back-patch to 9.4 where relfilenodemap.c was introduced.

Discussion: https://postgr.es/m/CAHoiPjzea6N0zuCi=+f9v_j94nfsy6y8SU7-=bp4=7qw6_i=Rg@mail.gmail.com
src/backend/utils/cache/relfilenodemap.c