]> granicus.if.org Git - pgbouncer/commitdiff
switch to toggle between LIFO and round-robin
authorMarko Kreen <markokr@gmail.com>
Mon, 8 Oct 2007 07:06:41 +0000 (07:06 +0000)
committerMarko Kreen <markokr@gmail.com>
Mon, 8 Oct 2007 07:06:41 +0000 (07:06 +0000)
doc/pgbouncer.config.txt
etc/pgbouncer.ini
src/bouncer.h
src/main.c
src/objects.c

index fa8d6a73df35c853da7bbabd32ea395d7130ee16..ee37abe74e3e8094685ba4b4e6d00a77305a2455 100644 (file)
@@ -128,6 +128,16 @@ per-database config.
 
 Default: 20
 
+==== server_round_robin ====
+
+By default, pgbouncer reuses server connections in LIFO manner, so that few
+connections get the most load.  This gives best performance if you have single
+server serving a database.  But if there is TCP round-robin behind a database
+IP then it's better if pgbouncer also uses connections in that manner, thus
+achieving uniform load.
+
+Default: 0
+
 === Log settings ===
 
 ==== log_connections ====
index a796f62f685cadd07a8879873d48dd4668cde45c..69bb173c9e718492267418925cb62580087f3590 100644 (file)
@@ -93,6 +93,10 @@ log_disconnections = 1
 ; log error messages pooler sends to clients
 log_pooler_errors = 1
 
+
+; If off, then server connections are reused in LIFO manner
+;server_round_robin = 0
+
 ;;;
 ;;; Timeouts
 ;;;
index a1ebd51ef99ba73ab9c5a92070ba72bb51d47083..2b487bb13192b3700af57bd873cfaaa3cce313ef 100644 (file)
@@ -277,6 +277,7 @@ extern usec_t cf_server_login_retry;
 extern usec_t cf_query_timeout;
 extern usec_t cf_client_idle_timeout;
 extern usec_t cf_client_login_timeout;
+extern int cf_server_round_robin;
 
 extern int cf_auth_type;
 extern char *cf_auth_file;
index cd00d1ba3891c64a0187c72d18ebafc16af03d2f..42b75117da3d6542384981e71dc5eb5c9bad4137 100644 (file)
@@ -81,6 +81,7 @@ int cf_default_pool_size = 20;
 char *cf_server_reset_query = "";
 char *cf_server_check_query = "select 1";
 usec_t cf_server_check_delay = 30 * USEC;
+int cf_server_round_robin = 0;
 
 usec_t cf_server_lifetime = 60*60*USEC;
 usec_t cf_server_idle_timeout = 10*60*USEC;
@@ -129,6 +130,7 @@ ConfElem bouncer_params[] = {
 {"server_idle_timeout",        true, CF_TIME, &cf_server_idle_timeout},
 {"server_connect_timeout",true, CF_TIME, &cf_server_connect_timeout},
 {"server_login_retry", true, CF_TIME, &cf_server_login_retry},
+{"server_round_robin", true, CF_INT, &cf_server_round_robin},
 
 {"pkt_buf",            false, CF_INT, &cf_sbuf_len},
 {"tcp_defer_accept",   false, CF_INT, &cf_tcp_defer_accept},
index f6843b1f859eed395723810d9427f68a2a030061..0a88787c072ba7833976baecf14b904389555b99 100644 (file)
@@ -257,7 +257,7 @@ void change_server_state(PgSocket *server, SocketState newstate)
                statlist_append(&server->head, &pool->tested_server_list);
                break;
        case SV_IDLE:
-               if (server->close_needed)
+               if (server->close_needed || cf_server_round_robin)
                        /* try to avoid immediate usage then */
                        statlist_append(&server->head, &pool->idle_server_list);
                else