I have just found a typo in the source code (not in a comment) of bufmgr.c that result in waste of memory. It might be a 'bug' but it does not result in any incorrect operation but just results in waste of a few memory resource.
As sizeof(PrivateRefCountArray) found in InitBufferPoolAccess() is 64 and sizeof(PrivateRefCountEntry) which should be used here is 8, this typo produces 56 byte of unused memory area per one PrivateRefCount entry in the hash table. I think this result in not only the waste of memory but also reduces the cache hit ratio.
X hash_ctl.entrysize = sizeof(PrivateRefCountArray); O hash_ctl.entrysize = sizeof(PrivateRefCountEntry);
I see the problem, but I don't buy the argument that it wastes large amounts of memory. Or do you have some evidence that it does?
I think we should fix it, but not backpatch.
--
Simon Riggs http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services