Commit 5f7279d0 authored by aivanov@mysql.com's avatar aivanov@mysql.com

Applied patch recieved from Marko:

 Make innodb_thread_concurrency 0 by default, and extend the usable
 range from 0 to 1000 (0 disables the thread throttling).
parent af9d6bcf
...@@ -195,7 +195,6 @@ extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs, ...@@ -195,7 +195,6 @@ extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
#define kernel_mutex (*kernel_mutex_temp) #define kernel_mutex (*kernel_mutex_temp)
#define SRV_MAX_N_IO_THREADS 100 #define SRV_MAX_N_IO_THREADS 100
#define SRV_CONCURRENCY_THRESHOLD 20
/* Array of English strings describing the current state of an /* Array of English strings describing the current state of an
i/o handler thread */ i/o handler thread */
......
...@@ -258,9 +258,10 @@ threads waiting for locks are not counted into the number because otherwise ...@@ -258,9 +258,10 @@ threads waiting for locks are not counted into the number because otherwise
we could get a deadlock. MySQL creates a thread for each user session, and we could get a deadlock. MySQL creates a thread for each user session, and
semaphore contention and convoy problems can occur withput this restriction. semaphore contention and convoy problems can occur withput this restriction.
Value 10 should be good if there are less than 4 processors + 4 disks in the Value 10 should be good if there are less than 4 processors + 4 disks in the
computer. Bigger computers need bigger values. */ computer. Bigger computers need bigger values. Value 0 will disable the
concurrency check. */
ulong srv_thread_concurrency = SRV_CONCURRENCY_THRESHOLD; ulong srv_thread_concurrency = 0;
ulong srv_commit_concurrency = 0; ulong srv_commit_concurrency = 0;
os_fast_mutex_t srv_conc_mutex; /* this mutex protects srv_conc data os_fast_mutex_t srv_conc_mutex; /* this mutex protects srv_conc data
...@@ -1141,7 +1142,7 @@ srv_conc_force_enter_innodb( ...@@ -1141,7 +1142,7 @@ srv_conc_force_enter_innodb(
trx_t* trx) /* in: transaction object associated with the trx_t* trx) /* in: transaction object associated with the
thread */ thread */
{ {
if (srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD) { if (UNIV_LIKELY(!srv_thread_concurrency)) {
return; return;
} }
...@@ -1167,7 +1168,7 @@ srv_conc_force_exit_innodb( ...@@ -1167,7 +1168,7 @@ srv_conc_force_exit_innodb(
{ {
srv_conc_slot_t* slot = NULL; srv_conc_slot_t* slot = NULL;
if (srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD) { if (UNIV_LIKELY(!srv_thread_concurrency)) {
return; return;
} }
......
...@@ -1821,15 +1821,15 @@ Variable_name Value ...@@ -1821,15 +1821,15 @@ Variable_name Value
innodb_sync_spin_loops 20 innodb_sync_spin_loops 20
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
Variable_name Value Variable_name Value
innodb_thread_concurrency 20 innodb_thread_concurrency 0
set global innodb_thread_concurrency=1000; set global innodb_thread_concurrency=1001;
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
Variable_name Value Variable_name Value
innodb_thread_concurrency 1000 innodb_thread_concurrency 1000
set global innodb_thread_concurrency=0; set global innodb_thread_concurrency=0;
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
Variable_name Value Variable_name Value
innodb_thread_concurrency 1 innodb_thread_concurrency 0
set global innodb_thread_concurrency=16; set global innodb_thread_concurrency=16;
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
Variable_name Value Variable_name Value
......
...@@ -1316,7 +1316,7 @@ show variables like "innodb_sync_spin_loops"; ...@@ -1316,7 +1316,7 @@ show variables like "innodb_sync_spin_loops";
# Test for innodb_thread_concurrency variable # Test for innodb_thread_concurrency variable
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
set global innodb_thread_concurrency=1000; set global innodb_thread_concurrency=1001;
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
set global innodb_thread_concurrency=0; set global innodb_thread_concurrency=0;
show variables like "innodb_thread_concurrency"; show variables like "innodb_thread_concurrency";
......
...@@ -338,7 +338,7 @@ innodb_srv_conc_enter_innodb( ...@@ -338,7 +338,7 @@ innodb_srv_conc_enter_innodb(
/*=========================*/ /*=========================*/
trx_t* trx) /* in: transaction handle */ trx_t* trx) /* in: transaction handle */
{ {
if (UNIV_LIKELY(srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD)) { if (UNIV_LIKELY(!srv_thread_concurrency)) {
return; return;
} }
...@@ -355,7 +355,7 @@ innodb_srv_conc_exit_innodb( ...@@ -355,7 +355,7 @@ innodb_srv_conc_exit_innodb(
/*========================*/ /*========================*/
trx_t* trx) /* in: transaction handle */ trx_t* trx) /* in: transaction handle */
{ {
if (UNIV_LIKELY(srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD)) { if (UNIV_LIKELY(!srv_thread_concurrency)) {
return; return;
} }
......
...@@ -5504,9 +5504,11 @@ log and this option does nothing anymore.", ...@@ -5504,9 +5504,11 @@ log and this option does nothing anymore.",
(gptr*) &srv_n_spin_wait_rounds, (gptr*) &srv_n_spin_wait_rounds,
0, GET_LONG, REQUIRED_ARG, 20L, 0L, ~0L, 0, 1L, 0}, 0, GET_LONG, REQUIRED_ARG, 20L, 0L, ~0L, 0, 1L, 0},
{"innodb_thread_concurrency", OPT_INNODB_THREAD_CONCURRENCY, {"innodb_thread_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
"Helps in performance tuning in heavily concurrent environments.", "Helps in performance tuning in heavily concurrent environments. "
"Sets the maximum number of threads allowed inside InnoDB. Value 0"
" will disable the thread throttling.",
(gptr*) &srv_thread_concurrency, (gptr*) &srv_thread_concurrency, (gptr*) &srv_thread_concurrency, (gptr*) &srv_thread_concurrency,
0, GET_LONG, REQUIRED_ARG, 20, 1, 1000, 0, 1, 0}, 0, GET_LONG, REQUIRED_ARG, 0, 0, 1000, 0, 1, 0},
{"innodb_commit_concurrency", OPT_INNODB_THREAD_CONCURRENCY, {"innodb_commit_concurrency", OPT_INNODB_THREAD_CONCURRENCY,
"Helps in performance tuning in heavily concurrent environments.", "Helps in performance tuning in heavily concurrent environments.",
(gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment