pgsql: Reduce overhead of scanning the backend[] array inLISTEN/NOTIFY - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Reduce overhead of scanning the backend[] array inLISTEN/NOTIFY
Date
Msg-id E1i7oQ9-0006tL-67@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Reduce overhead of scanning the backend[] array in LISTEN/NOTIFY.

Up to now, async.c scanned its whole array of per-backend state
whenever it needed to find listening backends.  That's expensive
if MaxBackends is large, so extend the data structure with list
links that thread the active entries together.

A downside of this change is that asyncQueueUnregister (unregister
a listening backend at backend exit) now requires exclusive not shared
lock, and it can take awhile if there are many other listening
backends.  We could improve the latter issue by using a doubly- not
singly-linked list, but it's probably not worth the storage space;
typical usage patterns for LISTEN/NOTIFY have fairly long-lived
listeners.

In return for that, Exec_ListenPreCommit (initially register a
listening backend), SignalBackends, and asyncQueueAdvanceTail
get significantly faster when MaxBackends is much larger than
the number of listening backends.  If most of the potential
backend slots are listening, we don't win, but that's a case
where the actual interprocess-signal overhead is going to swamp
these considerations anyway.

Martijn van Oosterhout, hacked a bit more by me

Discussion: https://postgr.es/m/CADWG95vtRBFDdrx1JdT1_9nhOFw48KaeTev6F_LtDQAFVpSPhA@mail.gmail.com

Branch
------
master

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

Modified Files
--------------
src/backend/commands/async.c | 97 ++++++++++++++++++++++++++++++--------------
1 file changed, 66 insertions(+), 31 deletions(-)


pgsql-committers by date:

Previous
From: Alvaro Herrera
Date:
Subject: pgsql: Fix unaccent generation script in Windows
Next
From: noreply@postgresql.org
Date:
Subject: pgsql: Tag refs/tags/REL_12_BETA4 was created