Por que query_cache_type está desativado por padrão, a partir do MySQL 5.6?

28

Atualizamos para o MySQL 5.6 e começamos a ver o carregamento do servidor db aumentado significativamente e, finalmente, descobrimos que o query_cache_typepadrão é desativar o start da 5.6.

Nós o ativamos novamente e vemos o carregamento diminuir, por que esse valor está sendo desativado por padrão, a partir do MySQL 5.6? Não consigo ver o problema ativado.

Ioga
fonte

Respostas:

39

Você precisa do histórico do InnoDB para entender o porquê. Aqui vai:

HISTÓRIA DE GUERRA

O InnoDB e o cache de consultas estão em constante estado de guerra. O InnoDB tende a ser muito pesado ao inspecionar alterações no buffer pool do InnoDB e, em seguida, cruzar o cache de consultas para as mesmas alterações.

TRATADO DE PAZ

Antes do MySQL 5.0, o cache da consulta era desabilitado para o InnoDB. Agora, o InnoDB interage com ele. Para simplificar, basta desabilitar o cache de consultas configurando o query_cache_size como 0.

De acordo com a documentação do MySQL em query_cache_time

Se o servidor for iniciado com o query_cache_type definido como 0, ele não adquirirá o mutex do cache de consulta, o que significa que o cache da consulta não pode ser ativado no tempo de execução e a sobrecarga é reduzida na execução da consulta.

TERMOS DE ENTREGA

Definir query_cache_size como 0 não é uma solução de tamanho único.

A razão da guerra, em primeiro lugar, está no alto. O InnoDB sempre inspecionará as alterações. Um cache de consulta maior tornará o InnoDB muito mais difícil. Desabilitando o cache da consulta, vamos ficar felizes com o InnoDB e o Query Cache. No entanto, você (o desenvolvedor / DBA) pode ser uma vítima dessa guerra por meio de um desempenho ruim de consulta, mesmo com um tratado de paz em vigor.

Dependendo do seguinte

  • Carga de trabalho
  • Frequência de Mudanças
  • Frequência de leitura dos mesmos dados

você deve definir query_cache_size para o número que achar que aumenta o desempenho (isso equivale a iniciar um movimento subterrâneo).

EPÍLOGO

Caso você esteja se perguntando de onde surgiu essa história de guerra, veja meu post antigo

Leia com atenção, porque eu aprendi isso nas páginas 209-215 do MySQL de alto desempenho (2ª edição)

Eu recomendei desabilitar o cache de consulta para outras pessoas antes

NOTA: Eu sei que a pergunta era sobre o query_cache_type . Isso afeta o cache da consulta. Desativar o cache reduz o domínio do InnoDB sobre ele. Definir manualmente o query_cache_type simplesmente força o Developer / DBA a pensar cuidadosamente sobre o tipo de consultas que o cache de consulta encontrará.

RolandoMySQLDBA
fonte
Olá, li todos os seus links. Na verdade, tentei desativar o cache de consultas novamente e vemos o carregamento aumentar significativamente novamente ... então precisamos ativar novamente. Não estou dizendo que você diz é errado, talvez apenas a nossa aplicação é pesado leitura e consulta de cache é muito útil para reduzir o loading .. (nosso site está funcionando WordPress)
Yoga
3
Se apenas mais posts do SO forem lidos assim (obrigado pela divertida analogia)! Aposto que as crianças sortudas de Rolando são contadas histórias de ninar no MySQL assim todas as noites! ;)
rinogo 9/09/2015
2
"Páginas 209-215 do MySQL de alto desempenho (2ª edição)" refere-se a um capítulo chamado "O cache de consultas do MySQL", de "Quando o cache de consultas é útil" e até o final. Isso corresponde às páginas 320-329 na 3ª edição.
Peter V. Mørch
8

Eu tenho um post no blog explicando por que isso está aqui .

A versão curta: O cache da consulta causa problemas de escalabilidade em máquinas com vários núcleos. Portanto, agora está desativado por padrão.

Morgan Tocker
fonte
Como uma continuação ao meu post, Stewart Smith descreve o impacto como "uma ordem de magnitude" pior flamingspork.com/blog/2014/06/05/...
Morgan Tocker
4

Para concluir as respostas, a solicitação da Oracle para "substituir" a funcionalidade do cache de consulta é a integração do memcached .

jynus
fonte