Ajustando (e entendendo) table_cache no mySQL

17

Eu executei o excelente script de ajuste de desempenho do MySQL e comecei a trabalhar com as sugestões. Um que eu encontrei foi

TABLE CACHE
Current table_cache value = 4096 tables You have a total of 1073 tables. You have 3900 open tables. Current table_cache hit rate is 2%, while 95% of your table cache is in use. You should probably increase your table_cache

Comecei a ler o table_cache, mas encontrei a documentação do MySQL bastante carente. Eles dizem para aumentar o table_cache , "se você tiver a memória". Infelizmente, a variável table_cache é definida como "O número de tabelas abertas para todos os segmentos".

Como a memória usada pelo MySQL mudará, se eu aumentar essa variável? O que é um bom valor para configurá-lo?

    
por jotango 27.10.2009 / 18:52

2 respostas

16

Na documentação do MySQL

For example, for 200 concurrent running connections, you should have a table cache size of at least 200 × N, where N is the maximum number of tables per join in any of the queries which you execute. You must also reserve some extra file descriptors for temporary tables and files.

Portanto, se em seu aplicativo você tiver uma consulta que une 4 tabelas e deseja manipular 200 conexões simultâneas, com base nessa instrução, você deve ter table_cache de pelo menos 800.

No que diz respeito ao uso de memória, eu não tenho esses números, eu suspeitava que dependeria do tamanho de suas tabelas que ele está armazenando em cache.

    
por 27.10.2009 / 19:30
2

Você deve monitorar a variável Opened_Tables e ver a rapidez com que ela aumenta. Se for significativamente mais rápido do que você cria novas tabelas (incluindo as temporárias), o cache da sua tabela pode ser muito pequeno.

Table_Cache deve sempre - na maioria das vezes - ser significativamente maior que o número total de tabelas no servidor. Caso contrário, continuará abrindo e fechando tabelas.

Não consigo ver como você pode obter uma taxa de acerto de cache de 2%, a menos que você esteja medindo o tempo logo após a reinicialização do servidor ou usando muito FLUSH TABLES (em relação ao número de consultas). Normalmente, a taxa de acertos do cache de tabela deve ser de 99,9%, caso contrário, o desempenho será ruim.

Não faça um FLUSH TABLES se puder evitá-lo, ele explode o cache.

As tabelas de abertura são caras, pois precisam ler o arquivo FRM. No MyISAM é significativamente pior (do que outros motores), como quando ele fecha uma tabela, ele também joga fora todos os blocos no cache de chaves que veio de seus índices. Então fechar uma tabela despeja seus índices do cache de chaves == não é bom! Outros mecanismos mantêm os blocos armazenados em cache, mas ainda precisam reler os metadados e alocar algumas estruturas.

    
por 22.01.2010 / 08:56