Commit a241d411 authored by Oleksandr Byelkin's avatar Oleksandr Byelkin

MDEV-18027: Running out of file descriptors and eventual crash

For automatic number of opened files limit take into account number of table instances for table cache
parent a9d13248
...@@ -1519,7 +1519,7 @@ sysdate-is-now FALSE ...@@ -1519,7 +1519,7 @@ sysdate-is-now FALSE
table-cache 421 table-cache 421
table-definition-cache 400 table-definition-cache 400
table-open-cache 421 table-open-cache 421
table-open-cache-instances 8 table-open-cache-instances 1
tc-heuristic-recover OFF tc-heuristic-recover OFF
thread-cache-size 151 thread-cache-size 151
thread-pool-idle-timeout 60 thread-pool-idle-timeout 60
......
select @@global.host_cache_size; select @@global.host_cache_size;
@@global.host_cache_size @@global.host_cache_size
632 653
...@@ -4432,7 +4432,7 @@ static int init_common_variables() ...@@ -4432,7 +4432,7 @@ static int init_common_variables()
min_connections= 10; min_connections= 10;
/* MyISAM requires two file handles per table. */ /* MyISAM requires two file handles per table. */
wanted_files= (extra_files + max_connections + extra_max_connections + wanted_files= (extra_files + max_connections + extra_max_connections +
tc_size * 2); tc_size * 2 * tc_instances);
#if defined(HAVE_POOL_OF_THREADS) && !defined(__WIN__) #if defined(HAVE_POOL_OF_THREADS) && !defined(__WIN__)
// add epoll or kevent fd for each threadpool group, in case pool of threads is used // add epoll or kevent fd for each threadpool group, in case pool of threads is used
wanted_files+= (thread_handling > SCHEDULER_NO_THREADS) ? 0 : threadpool_size; wanted_files+= (thread_handling > SCHEDULER_NO_THREADS) ? 0 : threadpool_size;
...@@ -4461,6 +4461,14 @@ static int init_common_variables() ...@@ -4461,6 +4461,14 @@ static int init_common_variables()
if (files < wanted_files && global_system_variables.log_warnings) if (files < wanted_files && global_system_variables.log_warnings)
sql_print_warning("Could not increase number of max_open_files to more than %u (request: %u)", files, wanted_files); sql_print_warning("Could not increase number of max_open_files to more than %u (request: %u)", files, wanted_files);
/* If we required too much tc_instances than we reduce */
SYSVAR_AUTOSIZE_IF_CHANGED(tc_instances,
(uint32) MY_MIN(MY_MAX((files - extra_files -
max_connections)/
2/tc_size,
1),
tc_instances),
uint32);
/* /*
If we have requested too much file handles than we bring If we have requested too much file handles than we bring
max_connections in supported bounds. Still leave at least max_connections in supported bounds. Still leave at least
...@@ -4468,7 +4476,7 @@ static int init_common_variables() ...@@ -4468,7 +4476,7 @@ static int init_common_variables()
*/ */
SYSVAR_AUTOSIZE_IF_CHANGED(max_connections, SYSVAR_AUTOSIZE_IF_CHANGED(max_connections,
(ulong) MY_MAX(MY_MIN(files- extra_files- (ulong) MY_MAX(MY_MIN(files- extra_files-
min_tc_size*2, min_tc_size*2*tc_instances,
max_connections), max_connections),
min_connections), min_connections),
ulong); ulong);
...@@ -4481,7 +4489,7 @@ static int init_common_variables() ...@@ -4481,7 +4489,7 @@ static int init_common_variables()
*/ */
SYSVAR_AUTOSIZE_IF_CHANGED(tc_size, SYSVAR_AUTOSIZE_IF_CHANGED(tc_size,
(ulong) MY_MIN(MY_MAX((files - extra_files - (ulong) MY_MIN(MY_MAX((files - extra_files -
max_connections) / 2, max_connections) / 2 / tc_instances,
min_tc_size), min_tc_size),
tc_size), ulong); tc_size), ulong);
DBUG_PRINT("warning", DBUG_PRINT("warning",
......
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