MySQL consumindo quase toda a memória no cache? [duplicado]

1

Estou executando um servidor com 24G de RAM. A única coisa que corre aqui é um servidor MySQL configurado como mestre.

Quando eu verifico a memória via free -m estou recebendo isso:

             total       used       free     shared    buffers     cached
Mem:         24158      24027        131          0        131      23050

Aprox. 23G está no cache. O que parece muito para mim.

Eu também configurei o cache para 0 no my.cnf

query_cache_size        = 0

Como posso verificar o que é exatamente armazenado em cache? Também uma reinicialização do mysql não limpa o cache. Um flush tables também não ajudou.

    
por High6 29.12.2011 / 19:12

2 respostas

5

Você está vendo dois caches diferentes. free -m informa quanta memória o sistema operacional está usando para o cache de disco, não quanto o MySQL está usando para o cache do banco de dados. E o sistema operacional deveria estar usando o máximo de memória possível para o cache de disco - por que você não iria querer um cache tão grande quanto possível? Essa memória está sempre disponível para ser usada se um aplicativo precisar dela. Veja aqui para uma boa discussão sobre o uso da memória do Linux para armazenamento em cache.

    
por 29.12.2011 / 19:17
-1

Isso significa que quase toda a memória é usada pelo kernel para armazenar dados em cache. Você provavelmente tem um sistema quase ocioso, então não importa muito, mas para otimizá-lo, você deve olhar a configuração do mysql ...

Se você acha que pode se beneficiar do cache de consulta, ative-o e dê a ele, por exemplo, 128 MB. Então você pode verificar no mysql como é utilizado. Se você executar principalmente consultas SELECT e não muitos INSERT / UPDATE, o cache de consulta pode ser bom para você. Isso raramente causa problemas, portanto, você pode deixá-lo com segurança ativado.

Então, se você estiver usando o mecanismo de armazenamento MyISAM, também deve ativar alguma memória através da variável kay_buffer. Se estiver usando o InnoDB, o conselho geral é dar 50-80% da memória disponível para innodb_buffer_pool_size (se este for um servidor mysql dedicado). O Mysql e o InnoDB sabem melhor o que exatamente armazenar em cache do que o kernel do linux.

Para liberar caches mysql (lidos), acho que apenas o mysql restart ajuda. Para liberar caches do sistema, use o comando:

echo 3 > /proc/sys/vm/drop_caches

link

    
por 04.01.2012 / 16:46