Qual valor de thread_cache_size devo usar?

24

Estou usando o Asp.Net junto com o MySQL. Na cadeia de conexão .Net, configurei o Tamanho máximo do conjunto como 150.

Se eu executar o seguinte, recebo estes valores:

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474

Que fornece Threads_created / Connections = 0,1392.

Então, parece que eu preciso aumentar thread_cache_size .

Mas se eu correr SHOW PROCESSLIST eu sempre vejo que eu tenho um monte de conexões abertas (a maioria delas dormindo) por causa do pool criado pelo .net. Ainda preciso definir o thread_cache_size , pois ainda reutilizarei as conexões do pool de conexão? Se o tamanho do pool é 150, você acha que um bom valor seria definir thread_cache_size para 150+? Isso afetaria muito a CPU e a memória?

    
por Martin 18.07.2012 / 13:37

3 respostas

39

Com base nas informações da Documentação do MySQL você deve fazer o seguinte: Descobrir qual o maior número de conexões simultâneas que o mysqld teve usando Conexões , Threads_created e Max_used_connections ,

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

Tente calcular o seguinte

Threads_created / Connections : se esse valor for maior que 0,01, aumente thread_cache_size . No mínimo, thread_cache_size deve ser maior que Max_used_connections .

    
por 18.07.2012 / 18:08
9

De acordo com os documentos do MySQL, você deve definir thread_cache_size para que a maioria das novas conexões use threads do cache em vez de threads recém-criados. Isso economiza parte da sobrecarga de criação de threads, embora normalmente não crie uma melhoria significativa no desempenho:

Requests for threads are satisfied by reusing threads taken from the cache if possible, and only when the cache is empty is a new thread created. This variable can be increased to improve performance if you have a lot of new connections. Normally, this does not provide a notable performance improvement if you have a good thread implementation. However, if your server sees hundreds of connections per second you should normally set thread_cache_size high enough so that most new connections use cached threads. (source)

Isso significa que você deve definir seu thread_cache_size para que Threads_created / Connections (o% de conexões que levam à criação de novos segmentos) seja bastante baixo. Se você pegar os documentos do MySQL literalmente ("most"), o valor deve ser < 50%. A resposta de RolandoMySQLDBA diz < 1%. Eu não sei quem está mais perto da verdade.

Você deve não definir thread_cache_size maior que Max_used_connections . A frase 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 seu servidor ever usa . O MySQL nunca colocará tantos encadeamentos no cache de qualquer maneira - ele não coloca os encadeamentos no cache de forma preventiva - ele só os coloca lá após um cliente criar um encadeamento e desconectar. Se você nunca tiver clientes X conectados ao mesmo tempo, você nunca terá threads X no cache:

When a client disconnects, the client's threads are put in the cache if there are fewer than thread_cache_size threads there. (source)

Veja também esta resposta de Michael:

Setting thread_cache_size to a value larger than max_connections seems like tremendously unhelpful advice... the cache can't possibly grow larger than max_connections and even a cache anywhere close to that size could only make sense if you have a tremendous amount of churn on your threads... which, in a well-behaved application, won't be the case.

link

    
por 16.10.2015 / 06:42
-2

No dia útil comum, um 'novo contratado' possivelmente precisaria de uma conexão? A maioria dos magos não sabe quantas pessoas poderiam ser contratadas nos próximos dias. V8 do MySQL sugere CAP thread_cache_size em 100 para evitar sobrecarga, independentemente de max_used_connections. Para mim, 100 é um bom CAP.

Veja este link, por favor.

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_thread_cache_size
    
por 09.10.2017 / 18:37