Согласно документации 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, и даже кэш в любом месте, близкий к этому размеру, может иметь смысл только в том случае, если в ваших потоках имеется огромное количество оттока ... что в приложении с хорошим поведением не будет иметь место.
/dba//a/28701