Remove the limit on the number of entries allowed in catcaches, and
Tom Lane <tgl@sss.pgh.pa.us>
Remove the limit on the number of entries allowed in catcaches, and remove the infrastructure needed to enforce the limit, ie, the global LRU list of cache entries. On small-to-middling databases this wins because maintaining the LRU list is a waste of time. On large databases this wins because it's better to keep more cache entries (we assume such users can afford to use some more per-backend memory than was contemplated in the Berkeley-era catcache design). This provides a noticeable improvement in the speed of psql \d on a 10000-table database, though it doesn't make it instantaneous. While at it, use per-catcache settings for the number of hash buckets per catcache, rather than the former one-size-fits-all value. It's a bit silly to be using the same number of hash buckets for, eg, pg_am and pg_attribute. The specific values I used might need some tuning, but they seem to be in the right ballpark based on CATCACHE_STATS results from the standard regression tests.
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/utils/cache/catcache.c | modified | +51 −146 |
| src/backend/utils/cache/syscache.c | modified | +122 −47 |
| src/include/utils/catcache.h | modified | +8 −13 |