Ajustando o cache de consulta do mysql

3

Estou procurando ajustar o cache de consultas no mysql no meu VPS [uma configuração de 360MB]. Quando eu comecei, estava em 32MB, e eu estava recebendo uma quantidade não trivial de qcache_lowmem_prunes. Eu adicionei um cronjob para executar FLUSH QUERY CACHE periodicamente, o que ajudou, mas não o suficiente. Eu tenho ampliado isso gradualmente, mas mesmo com 80MB [eu temporariamente tirei algumas memórias do php-cgi], eu ainda vejo ameixas de baixa memória.

OTOH, tenho apenas uma taxa de acerto de 50% [isto é, Qcache_hits é cerca de metade de Qcache_hits + Com_select]. Eu suspeito strongmente que muitas das minhas consultas são consultas únicas e, portanto, não devem ser armazenadas em cache. Gostaria de identificá-los e marcá-los com SQL_NO_CACHE.

Alguma sugestão para uma maneira fácil de fazer isso?

Também é possível que algumas das minhas consultas não sejam armazenadas em cache desde que as tabelas foram alteradas, embora eu não pense, com base em um modelo mental grosseiro, que esse é o caso. Pelo menos, os resultados devem ser consistentes para a maioria das consultas; Estou usando o InnoDB, então meu entendimento é que um UPDATE aleatório não necessariamente invalida todos os SELECTs. Está correto?

    
por Mikeage 03.02.2010 / 05:31

2 respostas

1

Não entendo por que você deseja liberar o cache. Ele cuida de si mesmo, e não há benefício de desempenho (que eu já vi) para periodicamente liberá-lo. A taxa de acertos do cache de 50% é realmente incrível.

Qualquer atualização em qualquer linha da tabela invalida todas as consultas que usaram essa tabela. Isso significa que qualquer consulta que se junte a ela é removida. Não importa se os resultados são afetados ou não.

Sugiro usar uma solução de armazenamento em cache como o memcached, onde você tem um controle mais refinado do que está sendo armazenado em cache e como os dados são expirados.

Se você estiver vendo problemas de desempenho, talvez seja melhor deixar cair a memória associada ao cache de consulta e aumentar seu innodb_buffer_pool e innodb_additional_mem_pool_size.

link

Além disso, você deve dar uma olhada no sintonizador mysql: link

    
por 03.02.2010 / 09:49
0

Você pode criar o gatilho do MySQL para analisar solicitações de solicitação em tempo real e reescrevê-lo com o query_cache var.

Isso consumirá mais CPU, mas evite olhar para a origem do software.

link

    
por 03.02.2010 / 07:12

Tags