postgresql/src/backend/storage/ipc
Tom Lane ebfc56d3fb Handle impending sinval queue overflow by means of a separate signal
(SIGUSR1, which we have not been using recently) instead of piggybacking
on SIGUSR2-driven NOTIFY processing.  This has several good results:
the processing needed to drain the sinval queue is a lot less than the
processing needed to answer a NOTIFY; there's less contention since we
don't have a bunch of backends all trying to acquire exclusive lock on
pg_listener; backends that are sitting inside a transaction block can
still drain the queue, whereas NOTIFY processing can't run if there's
an open transaction block.  (This last is a fairly serious issue that
I don't think we ever recognized before --- with clients like JDBC that
tend to sit with open transaction blocks, the sinval queue draining
mechanism never really worked as intended, probably resulting in a lot
of useless cache-reset overhead.)  This is the last of several proposed
changes in response to Philip Warner's recent report of sinval-induced
performance problems.
2004-05-23 03:50:45 +00:00
..
ipc.c This patch properly sets the prototype for the on_shmem_exit and 2003-12-12 18:45:10 +00:00
ipci.c Code review for ARC patch. Eliminate static variables, improve handling 2004-04-19 23:27:17 +00:00
Makefile $Header: -> $PostgreSQL Changes ... 2003-11-29 19:52:15 +00:00
pmsignal.c Win32 signals cleanup. Patch by Magnus Hagander, with input from Claudio 2004-02-08 22:28:57 +00:00
README $Header: -> $PostgreSQL Changes ... 2003-11-29 19:52:15 +00:00
shmem.c Drops in the CreateProcess calls for Win32 (essentially wrapping up the 2004-01-11 03:49:31 +00:00
shmqueue.c $Header: -> $PostgreSQL Changes ... 2003-11-29 19:52:15 +00:00
sinval.c Handle impending sinval queue overflow by means of a separate signal 2004-05-23 03:50:45 +00:00
sinvaladt.c Handle impending sinval queue overflow by means of a separate signal 2004-05-23 03:50:45 +00:00

$PostgreSQL: pgsql/src/backend/storage/ipc/README,v 1.4 2003/11/29 19:51:56 pgsql Exp $
Mon Jul 18 11:09:22 PDT 1988  W.KLAS

Cache invalidation synchronization routines:
===========================================

The cache synchronization is done using a message queue. Every
backend can register a message which then has to be read by
all backends. A message read by all backends is removed from the 
queue automatically. If a message has been lost because the buffer
was full, all backends that haven't read this message will be
told that they have to reset their cache state. This is done
at the time when they try to read the message queue.

The message queue is implemented as a shared buffer segment. Actually,
the queue is a circle to allow fast inserting, reading (invalidate data) and
maintaining the buffer.