• Tom Lane's avatar
    Reduce initial size of RelfilenodeMapHash. · 8085a4f7
    Tom Lane authored
    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
    8085a4f7
relfilenodemap.c 6.86 KB