While reviewing another thread [1], I noticed a metion to lock duration, and I think there is room to improve the current implementation on InvalidateBuffer and InvalidateVictimBuffer, that thread is already a fork of something else, but I think this has its own merit.
In my (current) understanding partition LWLock guards a fraction of the hash table entries, and the buffer header lock as the name suggests guards the buffer descriptor. I think holding the Buffer header lock is not a problem, as contention would require someone else accessing precisely that buffer, holding the partition lock is more critical, as it may contend on thousands of distinct buffers. This patch minimises the partition time, and keep the buffer header guarding the largest portion of the function body. [1] https://www.postgresql.org/message-id/dbbd1998-19ff-4ac2-b4b1-a39f4ec1b0f5%40iki.fi
0001-buffmgr-Tighten-LWLock-BuferMapping.patch
Description: Binary data
