De acordo com os documentos do MySQL, você deve configurar thread_cache_size
para que a maioria das novas conexões use threads do cache em vez de threads recém-criados. Isso economiza alguma sobrecarga na criação de encadeamentos, embora normalmente não crie uma melhoria significativa no desempenho:
As solicitações de encadeamentos são atendidas reutilizando encadeamentos retirados do cache, se possível, e somente quando o cache está vazio é que um novo encadeamento é criado. Essa variável pode ser aumentada para melhorar o desempenho se você tiver muitas novas conexões. Normalmente, isso não fornece uma melhoria notável no desempenho se você tiver uma boa implementação de encadeamento. No entanto, se o servidor visualizar centenas de conexões por segundo, você normalmente deverá definir o thread_cache_size alto o suficiente para que a maioria das novas conexões use threads em cache . (fonte)
Isso significa que você deve definir o seu thread_cache_size
para que Threads_created / Connections
(a% de conexões que levam à criação de novos threads) seja bastante baixa. Se você pegar os documentos do MySQL literalmente ("most"), o valor deve ser <50%. A resposta de RolandoMySQLDBA diz <1%. Não sei quem está mais perto da verdade.
Você não deve definir thread_cache_size
mais alto que Max_used_connections
. A sentença final na resposta de RolandoMySQLDBA ("No mínimo, thread_cache_size deve ser maior que Max_used_connections") não parece sensata porque diz que você deve manter mais threads no cache do que o servidor já usa. O MySQL nunca colocará tantos threads no cache de qualquer maneira - ele não coloca preventivamente threads no cache - apenas os coloca depois que um cliente cria um thread e se desconecta. Se você nunca tiver clientes X conectados ao mesmo tempo, nunca terá X threads no cache:
Quando um cliente é desconectado, os encadeamentos do cliente são colocados no cache se houver menos do que encadeamentos thread_cache_size. (fonte)
Veja também esta resposta de Michael:
Definir thread_cache_size com um valor maior que max_connections parece um conselho tremendamente inútil ... o cache não pode crescer maior que max_connections e mesmo um cache em qualquer lugar próximo a esse tamanho só faria sentido se você tiver uma tremenda quantidade de rotatividade em seus threads ... que, em uma aplicação bem-comportada, não será o caso.
/dba//a/28701