Commit fa3edbf4 authored by Monty's avatar Monty

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
parent 260dd476
...@@ -1068,7 +1068,8 @@ The following options may be given as the first argument: ...@@ -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 ...@@ -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
......
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; ...@@ -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
...@@ -2995,6 +2995,7 @@ void unlink_thd(THD *thd) ...@@ -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() ...@@ -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);
......
...@@ -235,6 +235,8 @@ ...@@ -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
......
...@@ -3194,9 +3194,9 @@ static Sys_var_ulong Sys_table_cache_size( ...@@ -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)
......
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