mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
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). innobase/include/srv0srv.h: Remove SRV_CONCURRENCY_THRESHOLD. The magic value is 0 from now on. innobase/srv/srv0srv.c: Remove SRV_CONCURRENCY_THRESHOLD. The magic value is 0 from now on. mysql-test/r/innodb.result: innodb_thread_concurrency is 0..1000 now, and the default is 0. mysql-test/t/innodb.test: innodb_thread_concurrency is 0..1000 now. sql/ha_innodb.cc: Remove SRV_CONCURRENCY_THRESHOLD. The magic value is 0 from now on. sql/mysqld.cc: innodb_thread_concurrency is 0..1000 now, and 0 (the default) disables the thread throttling.
This commit is contained in:
parent
74f499fade
commit
e3f0690d9b
6 changed files with 15 additions and 13 deletions
|
@ -195,7 +195,6 @@ extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
|
|||
#define kernel_mutex (*kernel_mutex_temp)
|
||||
|
||||
#define SRV_MAX_N_IO_THREADS 100
|
||||
#define SRV_CONCURRENCY_THRESHOLD 20
|
||||
|
||||
/* Array of English strings describing the current state of an
|
||||
i/o handler thread */
|
||||
|
|
|
@ -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
|
||||
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
|
||||
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;
|
||||
|
||||
os_fast_mutex_t srv_conc_mutex; /* this mutex protects srv_conc data
|
||||
|
@ -1141,7 +1142,7 @@ srv_conc_force_enter_innodb(
|
|||
trx_t* trx) /* in: transaction object associated with the
|
||||
thread */
|
||||
{
|
||||
if (srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD) {
|
||||
if (UNIV_LIKELY(!srv_thread_concurrency)) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -1167,7 +1168,7 @@ srv_conc_force_exit_innodb(
|
|||
{
|
||||
srv_conc_slot_t* slot = NULL;
|
||||
|
||||
if (srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD) {
|
||||
if (UNIV_LIKELY(!srv_thread_concurrency)) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -1821,15 +1821,15 @@ Variable_name Value
|
|||
innodb_sync_spin_loops 20
|
||||
show variables like "innodb_thread_concurrency";
|
||||
Variable_name Value
|
||||
innodb_thread_concurrency 20
|
||||
set global innodb_thread_concurrency=1000;
|
||||
innodb_thread_concurrency 0
|
||||
set global innodb_thread_concurrency=1001;
|
||||
show variables like "innodb_thread_concurrency";
|
||||
Variable_name Value
|
||||
innodb_thread_concurrency 1000
|
||||
set global innodb_thread_concurrency=0;
|
||||
show variables like "innodb_thread_concurrency";
|
||||
Variable_name Value
|
||||
innodb_thread_concurrency 1
|
||||
innodb_thread_concurrency 0
|
||||
set global innodb_thread_concurrency=16;
|
||||
show variables like "innodb_thread_concurrency";
|
||||
Variable_name Value
|
||||
|
|
|
@ -1316,7 +1316,7 @@ show variables like "innodb_sync_spin_loops";
|
|||
|
||||
# Test for innodb_thread_concurrency variable
|
||||
show variables like "innodb_thread_concurrency";
|
||||
set global innodb_thread_concurrency=1000;
|
||||
set global innodb_thread_concurrency=1001;
|
||||
show variables like "innodb_thread_concurrency";
|
||||
set global innodb_thread_concurrency=0;
|
||||
show variables like "innodb_thread_concurrency";
|
||||
|
|
|
@ -338,7 +338,7 @@ innodb_srv_conc_enter_innodb(
|
|||
/*=========================*/
|
||||
trx_t* trx) /* in: transaction handle */
|
||||
{
|
||||
if (UNIV_LIKELY(srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD)) {
|
||||
if (UNIV_LIKELY(!srv_thread_concurrency)) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -355,7 +355,7 @@ innodb_srv_conc_exit_innodb(
|
|||
/*========================*/
|
||||
trx_t* trx) /* in: transaction handle */
|
||||
{
|
||||
if (UNIV_LIKELY(srv_thread_concurrency >= SRV_CONCURRENCY_THRESHOLD)) {
|
||||
if (UNIV_LIKELY(!srv_thread_concurrency)) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -5504,9 +5504,11 @@ log and this option does nothing anymore.",
|
|||
(gptr*) &srv_n_spin_wait_rounds,
|
||||
0, GET_LONG, REQUIRED_ARG, 20L, 0L, ~0L, 0, 1L, 0},
|
||||
{"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,
|
||||
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,
|
||||
"Helps in performance tuning in heavily concurrent environments.",
|
||||
(gptr*) &srv_commit_concurrency, (gptr*) &srv_commit_concurrency,
|
||||
|
|
Loading…
Reference in a new issue