Какое значение thread_cache_size я должен использовать?

Я использую 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+? Это сильно повлияет на процессор и память?

3 ответа

Основываясь на информации в MySQL Documentation, вы должны сделать следующее: выяснить, какое наибольшее количество одновременных подключений было у mysqld с использованием Connections, Threads_created и Max_used_connections,

  • SHOW GLOBAL STATUS LIKE 'Connections';
  • SHOW GLOBAL STATUS LIKE 'Threads_created';
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

Попробуйте рассчитать следующее

Threads_created / Connections: Если это больше 0,01, то увеличить thread_cache_size, По крайней мере, thread_cache_size должно быть больше чем Max_used_connections,

Согласно документации MySQL, вы должны установить thread_cache_size так что большинство новых соединений используют потоки из кэша, а не вновь созданные потоки. Это экономит некоторые накладные расходы на создание потоков, хотя, как правило, не создает значительного улучшения производительности:

Запросы для потоков выполняются путем повторного использования потоков, взятых из кэша, если это возможно, и только когда кэш пуст, создается новый поток. Эта переменная может быть увеличена для повышения производительности, если у вас много новых подключений. Как правило, это не обеспечивает заметного улучшения производительности, если у вас есть хорошая реализация потока. Однако, если ваш сервер видит сотни соединений в секунду, вы должны обычно устанавливать достаточно высокий 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-потоков в кеше:

Когда клиент отключается, клиентские потоки помещаются в кеш, если там меньше потоков thread_cache_size. (источник)

Смотрите также этот ответ Майкла:

Установка для thread_cache_size значения, превышающего max_connections, кажется чрезвычайно бесполезным советом... кэш не может быть больше, чем max_connections, и даже кэш в любом месте, близкий к этому размеру, может иметь смысл только в том случае, если в ваших потоках имеется огромное количество оттока... что в приложении с хорошим поведением не будет иметь место.

/questions/177438/nastrojka-adapterov-wi-fi-v-linux/177459#177459

В обычный рабочий день, понадобится ли "новому наему" соединение? Большинство магов не будут знать, сколько людей можно нанять в ближайшие несколько дней. V 8 MySQL предлагает CAP thread_cache_size на 100, чтобы предотвратить перегрузку независимо от max_used_connections. Для меня 100 - это хорошая CAP.

Смотрите эту ссылку, пожалуйста.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
Другие вопросы по тегам