pgsql: Use the pairing heap instead of a flat array for LSN replay wait

From: Alexander Korotkov <akorotkov(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Use the pairing heap instead of a flat array for LSN replay wait
Date: 2024-04-03 15:15:55
Message-ID: E1rs2LC-000Jnr-GT@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Use the pairing heap instead of a flat array for LSN replay waiters

06c418e163 introduced pg_wal_replay_wait() procedure allowing to wait for
the particular LSN to be replayed on standby. The waiters were stored in
the flat array. Even though scanning small arrays is fast, that might be a
problem at scale (a lot of waiting processes).

This commit replaces the flat shared memory array with the pairing heap,
which holds the waiter with the least LSN at the top. This gives us O(log N)
complexity for both inserting and removing waiters.

Reported-by: Alvaro Herrera
Discussion: https://postgr.es/m/202404030658.hhj3vfxeyhft%40alvherre.pgsql

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/bf1e65080629e2b0ac47ffe245576da96eff8420

Modified Files
--------------
src/backend/access/transam/xlogrecovery.c | 2 +-
src/backend/commands/waitlsn.c | 168 ++++++++++++++----------------
src/backend/lib/pairingheap.c | 18 +++-
src/include/commands/waitlsn.h | 44 +++++++-
src/include/lib/pairingheap.h | 3 +
5 files changed, 140 insertions(+), 95 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Alvaro Herrera 2024-04-03 15:53:28 pgsql: Fix zeroing of pg_serial page without SLRU bank lock
Previous Message Robert Haas 2024-04-03 13:15:42 Re: pgsql: Allow SIGINT to cancel psql database reconnections.