Make deadlock_timeout PGC_SUSET rather than PGC_SIGHUP.

This allows deadlock_timeout to be reduced for transactions that are
particularly likely to be involved in a deadlock, thus detecting it
more quickly.  It is also potentially useful as a poor-man's deadlock
priority mechanism: a transaction with a high deadlock_timeout is less
likely to be chosen as the victim than one with a low
deadlock_timeout.  Since that could be used to game the system, we
make this PGC_SUSET rather than PGC_USERSET.

At some point, it might be worth thinking about a more explicit
priority mechanism, since using this is far from fool-proof.  But
let's see whether there's enough use case to justify the additional
work before we go down that route.

Noah Misch, reviewed by Shigeru Hanada
This commit is contained in:
Robert Haas 2011-06-21 22:32:30 -04:00
parent 8f9fe6edce
commit 7095003cbe
2 changed files with 4 additions and 3 deletions

View File

@ -5266,7 +5266,8 @@ dynamic_library_path = 'C:\tools\postgresql;H:\my_project\lib;$libdir'
practice. On a heavily loaded server you might want to raise it. practice. On a heavily loaded server you might want to raise it.
Ideally the setting should exceed your typical transaction time, Ideally the setting should exceed your typical transaction time,
so as to improve the odds that a lock will be released before so as to improve the odds that a lock will be released before
the waiter decides to check for deadlock. the waiter decides to check for deadlock. Only superusers can change
this setting.
</para> </para>
<para> <para>

View File

@ -1532,8 +1532,8 @@ static struct config_int ConfigureNamesInt[] =
}, },
{ {
/* This is PGC_SIGHUP so all backends have the same value. */ /* This is PGC_SUSET to prevent hiding from log_lock_waits. */
{"deadlock_timeout", PGC_SIGHUP, LOCK_MANAGEMENT, {"deadlock_timeout", PGC_SUSET, LOCK_MANAGEMENT,
gettext_noop("Sets the time to wait on a lock before checking for deadlock."), gettext_noop("Sets the time to wait on a lock before checking for deadlock."),
NULL, NULL,
GUC_UNIT_MS GUC_UNIT_MS