diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2017-05-12 18:30:02 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2017-05-12 18:30:02 -0400 |
commit | ef7a6b3c9b15ac76e2e8fd7cd4ff70cdf417bbc3 (patch) | |
tree | df91c0f1a3bd37c1b2524999f797e38b585e70f6 /src/backend/utils/adt/dbsize.c | |
parent | 64417f8d35cf43c2bb0a38028b40338a0036e3f9 (diff) | |
download | postgresql-ef7a6b3c9b15ac76e2e8fd7cd4ff70cdf417bbc3.tar.gz postgresql-ef7a6b3c9b15ac76e2e8fd7cd4ff70cdf417bbc3.zip |
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
Diffstat (limited to 'src/backend/utils/adt/dbsize.c')
0 files changed, 0 insertions, 0 deletions