Por que o MySQL removeu o recurso de cache de consulta após a versão 8.0?
relate perguntas
-
Existem ferramentas de benchmarking do MySQL? [fechado]
-
Onde posso encontrar o log lento do mysql?
-
Como posso otimizar um mysqldump de um banco de dados grande?
-
Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?
-
Como um grupo pode rastrear alterações no esquema do banco de dados?
Há um blog detalhado da equipe do servidor MySQL sobre isso, onde Matt Lord diz:
Boa despedida!!!
É um desafio para a maioria dos desenvolvedores de banco de dados estimar corretamente o tamanho dos conjuntos de resultados mais comuns em seus aplicativos. Ter um cache de consulta grande era apenas um grande curativo para isso.
Há uma razão maior que prenunciou o fim do cache de consulta: Quatro anos atrás (
June 07, 2014
), respondi ao post Por que query_cache_type está desabilitado por padrão a partir do MySQL 5.6? . Resumindo, o cache de consulta estava sempre inspecionando o InnoDB Buffer Pool em busca de alterações. Você pode encontrar isso nas páginas 209-215 do MySQL de alto desempenho (2ª edição) .Eu mencionei isso ao longo dos anos:
Sep 05, 2012
: A sobrecarga da invalidação frequente do cache de consulta vale a pena?Sep 25, 2013
: invalidando entradas de cache de consulta (chave)Sep 26, 2013
: o valor de acerto do cache de consulta não está mudando no meu banco de dadosDec 23, 2013
: MySQL com alto uso de CPU e memóriaCache de consulta RIP !!!
(Concordo com a outra resposta, mas aqui está o meu valor de 2 centavos.)
Conforme implementado, ...
O QC não pode funcionar com Galera ou Group Replication, os quais estão ganhando mais força na arena de HA.
Quando
query_cache_size
ficou grande, ficou menos eficiente. Isso se deve a ineficiências na "poda". (Observação: o Aurora o reimplementou e parece ter corrigido esse problema.)Há uma sobrecarga em cada
SELECT
porque não sabe se o QC entrará em jogo. Décadas atrás, isso era estimado em 11%. Até se livrar do QC, a única solução era fazer as duas coisasquery_cache_size = 0
equery_cache_type = 0
no arquivo de configuração. (Poucas pessoas perceberam que ambos eram necessários.)No servidor de produção típico, as inserções acontecem com frequência. Como cada inserção causava uma poda de todas as entradas para essa(s) tabela(s), o QC era praticamente inútil para essas tabelas.
Talvez 95% das centenas de sistemas que revisei quanto a problemas de desempenho estejam melhores sem o CQ.