DOC: explain the relation between pool-low-conn and tune.idle-pool.shared

Disabling idle-pool sharing can result in awful performance in presence
of a not so high number of threads, because the number of available idle
connections will be shared among threads, resulting in most of them
abandonning their connections after a request is done if there are already
enough total available. This is a case where pool-low-conn ought to be
used to preserve a number of connections for each thread, but this relation
isn't obvious as is. Let's add mentions about this with both keywords.
This commit is contained in:
Willy Tarreau 2021-02-19 11:45:22 +01:00
parent 4cce7088d1
commit 0784db8566

View File

@ -2339,7 +2339,11 @@ tune.idle-pool.shared { on | off }
optimize the connection reuse rate. But to help with debugging or when optimize the connection reuse rate. But to help with debugging or when
suspecting a bug in HAProxy around connection reuse, it can be convenient to suspecting a bug in HAProxy around connection reuse, it can be convenient to
forcefully disable this idle pool sharing between multiple threads, and force forcefully disable this idle pool sharing between multiple threads, and force
this option to "off". The default is on. this option to "off". The default is on. It is strongly recommended against
disabling this option without setting a conservative value on "pool-low-conn"
for all servers relying on connection reuse to achieve a high performance
level, otherwise connections might be closed very often as the thread count
increases.
tune.idletimer <timeout> tune.idletimer <timeout>
Sets the duration after which haproxy will consider that an empty buffer is Sets the duration after which haproxy will consider that an empty buffer is
@ -14146,7 +14150,10 @@ pool-low-conn <max>
times. The default is zero, indicating that any idle connection can be used times. The default is zero, indicating that any idle connection can be used
at any time. It is the recommended setting for normal use. This only applies at any time. It is the recommended setting for normal use. This only applies
to connections that can be shared according to the same principles as those to connections that can be shared according to the same principles as those
applying to "http-reuse". applying to "http-reuse". In case connection sharing between threads would
be disabled via "tune.idle-pool.shared", it can become very important to use
this setting to make sure each thread always has a few connections, or the
connection reuse rate will decrease as thread count increases.
pool-max-conn <max> pool-max-conn <max>
Set the maximum number of idling connections for a server. -1 means unlimited Set the maximum number of idling connections for a server. -1 means unlimited