• Tom Lane's avatar
    Reduce overhead of cache-clobber testing in LookupOpclassInfo(). · 07f1e069
    Tom Lane authored
    Commit 03ffc4d6 added logic to bypass all caching behavior in
    LookupOpclassInfo when CLOBBER_CACHE_ALWAYS is enabled.  It doesn't
    look like I stopped to think much about what that would cost, but
    recent investigation shows that the cost is enormous: it roughly
    doubles the time needed for cache-clobber test runs.
    
    There does seem to be value in this behavior when trying to test
    the opclass-cache loading logic itself, but for other purposes the
    cost is excessive.  Hence, let's back off to doing this only when
    debug_invalidate_system_caches_always is at least 3; or in older
    branches, when CLOBBER_CACHE_RECURSIVELY is defined.
    
    While here, clean up some other minor issues in LookupOpclassInfo.
    Re-order the code so we aren't left with broken cache entries (leading
    to later core dumps) in the unlikely case that we suffer OOM while
    trying to allocate space for a new entry.  (That seems to be my
    oversight in 03ffc4d6.)  Also, in >= v13, stop allocating one array
    entry too many.  That's evidently left over from sloppy reversion in
    851b14b0.
    
    Back-patch to all supported branches, mainly to reduce the runtime
    of cache-clobbering buildfarm animals.
    
    Discussion: https://postgr.es/m/1370856.1625428625@sss.pgh.pa.us
    07f1e069
relcache.c 202 KB