aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/oracle_compat.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2008-06-19 21:32:56 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2008-06-19 21:32:56 +0000
commitfad153ec45299bd4d4f29dec8d9e04e2f1c08148 (patch)
tree9a1335bb5b2fe5bbe9d1b4d405c8da03d004afc4 /src/backend/utils/adt/oracle_compat.c
parent30dc388a0dd9ceca911b101fe1877cf7a23776fa (diff)
downloadpostgresql-fad153ec45299bd4d4f29dec8d9e04e2f1c08148.tar.gz
postgresql-fad153ec45299bd4d4f29dec8d9e04e2f1c08148.zip
Rewrite the sinval messaging mechanism to reduce contention and avoid
unnecessary cache resets. The major changes are: * When the queue overflows, we only issue a cache reset to the specific backend or backends that still haven't read the oldest message, rather than resetting everyone as in the original coding. * When we observe backend(s) falling well behind, we signal SIGUSR1 to only one backend, the one that is furthest behind and doesn't already have a signal outstanding for it. When it finishes catching up, it will in turn signal SIGUSR1 to the next-furthest-back guy, if there is one that is far enough behind to justify a signal. The PMSIGNAL_WAKEN_CHILDREN mechanism is removed. * We don't attempt to clean out dead messages after every message-receipt operation; rather, we do it on the insertion side, and only when the queue fullness passes certain thresholds. * Split SInvalLock into SInvalReadLock and SInvalWriteLock so that readers don't block writers nor vice versa (except during the infrequent queue cleanout operations). * Transfer multiple sinval messages for each acquisition of a read or write lock.
Diffstat (limited to 'src/backend/utils/adt/oracle_compat.c')
0 files changed, 0 insertions, 0 deletions