Я использую Asp.Net вместе с MySQL. В строке подключения .Net я установил максимальный размер пула на 150.
Если я запускаю следующее, я получаю эти значения:
SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474
Что дает Threads_created / Connections = 0,1392.
Таким образом, кажется, что мне нужно увеличить thread_cache_size
.
Но если я запускаю, SHOW PROCESSLIST
я всегда вижу, что у меня открыто много соединений (большинство из них спят) из-за пула, созданного .Net. Мне все еще нужно установить, так thread_cache_size
как я все еще буду повторно использовать соединения из пула соединений? Если размер пула равен 150, как вы думаете, будет ли лучше установить thread_cache_size
значение 150+? Это сильно повлияет на процессор и память?
источник
Согласно документации MySQL, вы должны установить
thread_cache_size
так, чтобы большинство новых соединений использовали потоки из кэша, а не вновь созданные потоки. Это экономит некоторые накладные расходы на создание потоков, хотя, как правило, не создает значительного улучшения производительности:Это будет означать, что вы должны установить
thread_cache_size
так, чтобыThreads_created / Connections
(% соединений, которые приводят к созданию новых потоков) был довольно низким. Если вы воспринимаете документы MySQL буквально («большинство»), значение должно быть <50%. Ответ RolandoMySQLDBA говорит, что <1%. Я не знаю, кто ближе к истине.Вы не должны устанавливать
thread_cache_size
выше, чемMax_used_connections
. Последнее предложение в ответе RolandoMySQLDBA («По крайней мере, thread_cache_size должно быть больше, чем Max_used_connections») не кажется разумным, поскольку в нем говорится, что вы должны хранить в кэше больше потоков, чем когда-либо использует ваш сервер . В любом случае MySQL никогда не будет помещать столько потоков в кэш - он не превентивно помещает потоки в кэш - он помещает их туда только после того, как клиент создаст поток и отключится. Если у вас никогда не будет X-клиентов, соединяющихся одновременно, у вас никогда не будет X-потоков в кеше:Смотрите также этот ответ Майкла:
/dba//a/28701
источник
В обычный рабочий день, понадобится ли «новому наему» соединение? Большинство магов не будут знать, сколько людей можно нанять в ближайшие несколько дней. V 8 MySQL предлагает CAP thread_cache_size на 100, чтобы предотвратить перегрузку независимо от max_used_connections. Для меня 100 - это хорошая CAP.
Смотрите эту ссылку, пожалуйста.
источник