mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03: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:
@@ -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
|
|||||||
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(
|
|||||||
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(
|
|||||||
{
|
{
|
||||||
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
|
|||||||
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";
|
|||||||
|
|
||||||
# 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(
|
|||||||
/*=========================*/
|
/*=========================*/
|
||||||
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(
|
|||||||
/*========================*/
|
/*========================*/
|
||||||
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.",
|
|||||||
(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,
|
||||||
|
Reference in New Issue
Block a user