1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Increase value of thread_cache_size to 32

Added 5 minute timeout before automaticlally removing threads from thread
cache.

This solves a problem with jemalloc, which is slow with a small
thread cache and also makes thread_cache big enough that most users
doesn't have to touch it
This commit is contained in:
Monty
2016-03-22 23:42:13 +02:00
parent 260dd476b0
commit fa3edbf40d
6 changed files with 30 additions and 12 deletions

View File

@ -1068,7 +1068,8 @@ The following options may be given as the first argument:
Decision to use in heuristic recover process. One of: Decision to use in heuristic recover process. One of:
COMMIT, ROLLBACK COMMIT, ROLLBACK
--thread-cache-size=# --thread-cache-size=#
How many threads we should keep in a cache for reuse How many threads we should keep in a cache for reuse.
These are freed after 5 minutes of idle time
--thread-pool-idle-timeout=# --thread-pool-idle-timeout=#
Timeout in seconds for an idle thread in the thread Timeout in seconds for an idle thread in the thread
pool.Worker thread will be shut down after timeout pool.Worker thread will be shut down after timeout
@ -1426,7 +1427,7 @@ table-cache 431
table-definition-cache 400 table-definition-cache 400
table-open-cache 431 table-open-cache 431
tc-heuristic-recover COMMIT tc-heuristic-recover COMMIT
thread-cache-size 0 thread-cache-size 151
thread-pool-idle-timeout 60 thread-pool-idle-timeout 60
thread-pool-max-threads 1000 thread-pool-max-threads 1000
thread-pool-oversubscribe 3 thread-pool-oversubscribe 3

View File

@ -1,24 +1,24 @@
SET @start_global_value = @@global.thread_cache_size; SET @start_global_value = @@global.thread_cache_size;
SELECT @start_global_value; SELECT @start_global_value;
@start_global_value @start_global_value
0 256
select @@global.thread_cache_size; select @@global.thread_cache_size;
@@global.thread_cache_size @@global.thread_cache_size
0 256
select @@session.thread_cache_size; select @@session.thread_cache_size;
ERROR HY000: Variable 'thread_cache_size' is a GLOBAL variable ERROR HY000: Variable 'thread_cache_size' is a GLOBAL variable
show global variables like 'thread_cache_size'; show global variables like 'thread_cache_size';
Variable_name Value Variable_name Value
thread_cache_size 0 thread_cache_size 256
show session variables like 'thread_cache_size'; show session variables like 'thread_cache_size';
Variable_name Value Variable_name Value
thread_cache_size 0 thread_cache_size 256
select * from information_schema.global_variables where variable_name='thread_cache_size'; select * from information_schema.global_variables where variable_name='thread_cache_size';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
THREAD_CACHE_SIZE 0 THREAD_CACHE_SIZE 256
select * from information_schema.session_variables where variable_name='thread_cache_size'; select * from information_schema.session_variables where variable_name='thread_cache_size';
VARIABLE_NAME VARIABLE_VALUE VARIABLE_NAME VARIABLE_VALUE
THREAD_CACHE_SIZE 0 THREAD_CACHE_SIZE 256
set global thread_cache_size=1; set global thread_cache_size=1;
select @@global.thread_cache_size; select @@global.thread_cache_size;
@@global.thread_cache_size @@global.thread_cache_size
@ -51,4 +51,4 @@ select @@global.thread_cache_size;
SET @@global.thread_cache_size = @start_global_value; SET @@global.thread_cache_size = @start_global_value;
SELECT @@global.thread_cache_size; SELECT @@global.thread_cache_size;
@@global.thread_cache_size @@global.thread_cache_size
0 256

View File

@ -0,0 +1 @@
--max-connections=1024

View File

@ -2995,6 +2995,7 @@ void unlink_thd(THD *thd)
static bool cache_thread() static bool cache_thread()
{ {
struct timespec abstime;
DBUG_ENTER("cache_thread"); DBUG_ENTER("cache_thread");
mysql_mutex_lock(&LOCK_thread_cache); mysql_mutex_lock(&LOCK_thread_cache);
@ -3013,8 +3014,21 @@ static bool cache_thread()
PSI_THREAD_CALL(delete_current_thread)(); PSI_THREAD_CALL(delete_current_thread)();
#endif #endif
set_timespec(abstime, THREAD_CACHE_TIMEOUT);
while (!abort_loop && ! wake_thread && ! kill_cached_threads) while (!abort_loop && ! wake_thread && ! kill_cached_threads)
mysql_cond_wait(&COND_thread_cache, &LOCK_thread_cache); {
int error= mysql_cond_timedwait(&COND_thread_cache, &LOCK_thread_cache,
&abstime);
if (error == ETIMEDOUT || error == ETIME)
{
/*
If timeout, end thread.
If a new thread is requested (wake_thread is set), we will handle
the call, even if we got a timeout (as we are already awake and free)
*/
break;
}
}
cached_thread_count--; cached_thread_count--;
if (kill_cached_threads) if (kill_cached_threads)
mysql_cond_signal(&COND_flush_thread_cache); mysql_cond_signal(&COND_flush_thread_cache);

View File

@ -235,6 +235,8 @@
that does not respond to "initial server greeting" timely that does not respond to "initial server greeting" timely
*/ */
#define CONNECT_TIMEOUT 10 #define CONNECT_TIMEOUT 10
/* Wait 5 minutes before removing thread from thread cache */
#define THREAD_CACHE_TIMEOUT 5*60
/* The following can also be changed from the command line */ /* The following can also be changed from the command line */
#define DEFAULT_CONCURRENCY 10 #define DEFAULT_CONCURRENCY 10

View File

@ -3194,9 +3194,9 @@ static Sys_var_ulong Sys_table_cache_size(
static Sys_var_ulong Sys_thread_cache_size( static Sys_var_ulong Sys_thread_cache_size(
"thread_cache_size", "thread_cache_size",
"How many threads we should keep in a cache for reuse", "How many threads we should keep in a cache for reuse. These are freed after 5 minutes of idle time",
GLOBAL_VAR(thread_cache_size), CMD_LINE(REQUIRED_ARG), GLOBAL_VAR(thread_cache_size), CMD_LINE(REQUIRED_ARG),
VALID_RANGE(0, 16384), DEFAULT(0), BLOCK_SIZE(1)); VALID_RANGE(0, 16384), DEFAULT(256), BLOCK_SIZE(1));
#ifdef HAVE_POOL_OF_THREADS #ifdef HAVE_POOL_OF_THREADS
static bool fix_tp_max_threads(sys_var *, THD *, enum_var_type) static bool fix_tp_max_threads(sys_var *, THD *, enum_var_type)