public inbox for [email protected]  
help / color / mirror / Atom feed
From: Heikki Linnakangas <[email protected]>
To: Andrey Borodin <[email protected]>
To: PostgreSQL Hackers <[email protected]>
Subject: Re: Refactor PROCLOCK hash table into partitioned list allocator
Date: Tue, 6 Jan 2026 16:23:43 +0200
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>

On 30/12/2025 14:37, Andrey Borodin wrote:
> Hi hackers,
> 
> Following up on the Discord discussion about the PROCLOCK hash table being
> a "weird allocator" that we never actually use for lookups - I took a stab at
> replacing it with a simpler partitioned free list approach as was suggested.
> I was doing this mostly to educate myself on Lock Manager internals.
> 
> The current implementation uses LockMethodProcLockHash purely as an allocator.
> We never do hash lookups by key; we only allocate entries, link them to the lock's
> procLocks list, and free them later. Using a full hash table for this adds
> unnecessary complexity and maybe even overhead (I did not measure this).
> 
> The attached patch replaces this with:
> - ProcLockArray: A fixed-size array of all PROCLOCK structs (allocated at startup)
> - ProcLockFreeList: Partitioned free lists, one per lock partition to reduce contention
> - ProcLockAlloc/Free: Simple push/pop operations on the free lists
> - PROCLOCK lookup: Linear traversal of lock->procLocks (see LockRefindAndRelease()
>    and FastPathGetRelationLockEntry())
> 
> The last point bothers me most. It seems like this traversals are expected to be short.
> But I'm not 100% sure.

Hmm, yeah the last point contradicts the premise that the hash table is 
used purely as an allocator. It *is* used for lookups, and you're 
replacing them with linear scans. That doesn't seem like an improvement.

- Heikki







view thread (2+ messages)

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: Refactor PROCLOCK hash table into partitioned list allocator
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox