mysql thread_cache_size reduz a conexão de CPU e max?

1

Recentemente descobri que meu servidor MySQL atinge 90% de alta utilização de CPU ao simular solicitações de threads 100-500 simultâneas

com as configurações padrão mais seguindo em my.cnf

max_connections = 500
max_allowed_packet = 16M

Eu noto que o max_connection pode chegar a 500, threads_created também pode ir alto até 200-500 e eu estou achando que isso realmente causou um CPU anormalmente alto

Por isso, em vez de usar configurações padrão, ajustei

innodb_buffer_pool_size = 2G #32bit linux server
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_thread_concurrency = 16
innodb_flush_method = O_DIRECT
innodb_additional_mem_pool_size = 20M
table_cache = 1028
thread_cache_size = 16
key_buffer_size=32M
query_cache_size=32M
join_buffer_size=1M

Com o mesmo teste de carga, a CPU mergulhou para 10% e abaixo ... No entanto, percebo que o max_connection nunca mais atinge 500. É menos de 50 agora ...

Isso é causado por thread_cache_size que eu ajustei? por padrão, é 0. Ou há algo errado em algum lugar ... Eu estou querendo saber nesse caso, se o servidor mysql é testado corretamente com a conexão máxima. Eu quero testar como se threads simultâneas podem atingir o max_connections, mas de alguma forma ele nunca bateu com a mesma quantidade que eu testei antes. Desde a mudança, nunca atinge acima de 50 agora.

Alguma ideia?

    
por flyclassic 29.12.2011 / 08:49

2 respostas

1

Is this caused by thread_cache_size i've adjusted?

Eu não acredito. Você aprimorou muitas configurações para que suas consultas sejam concluídas muito mais rapidamente, resultando em menos threads. thread_cache_size deve ser ativado quando houver uma explosão de conexões e reduzir a sobrecarga associada conforme link

Use persistent connections to the database to avoid connection overhead. If you cannot use persistent connections and you are initiating many new connections to the database, you may want to change the value of the thread_cache_size variable.

    
por 05.03.2013 / 00:23
1

Eu diria que sim. Toda vez que uma conexão é fechada, o MySQL compara o número de threads inativos no cache de encadeamentos com o valor de thread_cache_size . Se já houver muitos encadeamentos no cache, o encadeamento que serve a sessão de desconexão será destruído. Caso contrário, o encadeamento é descartado no cache.

Cada vez que uma nova conexão é feita, o servidor verificará o cache de segmento para ver se há um disponível no cache para atender a nova conexão. Em caso afirmativo, ele é removido do cache e atribuído à nova conexão. Se não, um novo segmento é gerado.

Evidentemente, reutilizar um encadeamento é uma operação menos intensiva do que criar e destruir, portanto, ter um cache de encadeamento diferente de zero é útil, especialmente quando você está se conectando e desconectando com freqüência ... com o custo provável de aumentar a memória utilização um pouco, uma vez que os threads no cache (pelo que eu posso dizer) não liberam nenhuma memória que eles alocaram para si mesmos, mesmo quando essa memória está acima da linha de base que é alocada para cada novo thread.

O contador threads_created informa quantas conexões não puderam ser atendidas do cache de encadeamentos.

    
por 01.06.2014 / 07:15

Tags