O query cache armazena conjuntos de resultados de instruções SELECT na memória para que consultas idênticas ignorem as etapas de análise e execução — o resultado retorna diretamente do cache. Isso reduz a utilização da CPU, diminui os IOPS e encurta o tempo de resposta em cargas de trabalho com muitas leituras, poucas gravações e dados estáveis. Em cenários com muitas gravações ou padrões de consulta variados, a sobrecarga da invalidação do cache pode reduzir o throughput geral. Portanto, teste com sua carga de trabalho real antes de ativar esse recurso em produção.
Quando usar o query cache
O query cache oferece melhor desempenho quando todas as condições abaixo são verdadeiras:
Os dados da tabela mudam raramente ou são estáticos.
A mesma instrução SELECT é executada repetidamente.
Os conjuntos de resultados das consultas têm menos de 1 MB.
O query cache nem sempre traz benefícios. Para cargas de trabalho com gravações frequentes em tabelas ou consultas variadas, a sobrecarga de invalidar e repovoar o cache pode reduzir o throughput geral. Teste com sua carga de trabalho real antes de ativar o recurso em produção.
Como funciona
O ApsaraDB RDS for MySQL calcula um valor de hash para cada instrução SELECT recebida de um cliente.
Se o hash corresponder a uma entrada em cache, o resultado retorna imediatamente — a consulta não passa por análise nem execução.
Caso não haja correspondência, a consulta executa normalmente, e tanto o hash quanto o resultado são armazenados no cache.
Quando qualquer tabela sofre alteração, todas as consultas em cache que referenciam essa tabela são invalidadas e removidas imediatamente.
Limitações
As seguintes consultas não são armazenadas em cache:
Consultas que diferem apenas em maiúsculas/minúsculas, espaços em branco, contexto de banco de dados, versão do protocolo ou conjunto de caracteres são tratadas como distintas e armazenadas separadamente.
Conjuntos de resultados de subconsultas — apenas o conjunto de resultados final da consulta externa é armazenado.
Consultas executadas dentro de uma função armazenada, procedimento armazenado, gatilho ou evento.
Consultas que chamam qualquer uma destas funções não determinísticas:
now(),curdate(),last_insert_id()ourand().Consultas que referenciam tabelas nos bancos de dados
mysql,information_schemaouperformance_schema.Consultas que referenciam tabelas temporárias.
Consultas que geram avisos.
Consultas contendo
SELECT … LOCK IN SHARE MODE,SELECT … FOR UPDATEouSELECT * FROM … WHERE AUTOINCREMENT_COL IS NULL.Consultas que referenciam uma variável definida pelo usuário.
Consultas que utilizam a dica
SQL_NO_CACHE.
Configure o query cache
Defina estes três parâmetros no ApsaraDB RDS console:
|
Parâmetro |
Padrão |
Descrição |
|
|
— |
Controla se o cache está ativo. |
|
|
3 MB |
Memória total alocada para o cache, em bytes. Deve ser um múltiplo de 1024. |
|
|
1 MB |
Tamanho máximo do conjunto de resultados para uma única consulta em cache, em bytes. Resultados maiores que este valor não são armazenados. |
No painel de navegação à esquerda, clique em Parameters. Na lista de parâmetros, localize query_cache_type e atualize seu valor para o valor desejado. A alteração entra em vigor somente após a reinicialização da instância. Se necessário, modifique também parâmetros relacionados, como query_cache_limit (valores válidos: 1 a 1048576) e query_cache_size (valores válidos: 0 a 104857600). Clique em no ícone de informações ao lado de um parâmetro para visualizar sua descrição.
Alterar o parâmetro query_cache_type aciona uma reinicialização automática da instância RDS. Se você definir query_cache_size com um valor que não seja múltiplo de 1024, o console retornará o erro The specified parameter is invalid, com o código de erro InvalidParameters.Malformed.
Ative e desative o cache
O cache fica ativado quando query_cache_size > 0 e query_cache_type é 1 ou 2.
O cache fica desativado quando query_cache_size = 0 ou query_cache_type = 0.
Recomendações
Evite definir
query_cache_sizecom um valor muito alto. Um cache excessivamente grande consome memória de outras estruturas da instância e aumenta a sobrecarga nas buscas. Comece com um valor entre 10 MB e 100 MB, conforme o tipo da sua instância, e ajuste-o com base no uso observado.Para ativar ou desativar o query cache, ajuste o valor de
query_cache_sizeem vez dequery_cache_type, pois alterações emquery_cache_typesó entram em vigor após a reinicialização da instância.O query cache beneficia apenas cargas de trabalho específicas. Teste exaustivamente com sua carga real antes de ativá-lo para evitar degradação de desempenho ou outros problemas.
Monitorar e verifique o desempenho do cache
Verifique estatísticas do cache
Execute a seguinte instrução para verificar o uso do cache:
SHOW GLOBAL STATUS LIKE 'Qcache%';
A saída inclui estas variáveis de status:
|
Variável |
Descrição |
|
|
Número de consultas atendidas pelo cache |
|
|
Número de consultas adicionadas ao cache |
|
|
Número de consultas que não puderam ser armazenadas em cache |
|
|
Número de consultas atualmente no cache |
Exemplo de saída:
mysql>show global status like 'Qca%';
+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| Qcache_free_blocks | 2763 |
| Qcache_free_memory | 10115160 |
| Qcache_hits | 365589713 |
| Qcache_inserts | 612280336 |
| Qcache_lowmem_prunes | 1257159 |
| Qcache_not_cached | 1805250864 |
| Qcache_queries_in_cache | 9318 |
| Qcache_total_blocks | 22409 |
+-------------------------+------------+
Verifique pelo console do ApsaraDB RDS
No painel de navegação à esquerda, escolha Autonomy Service (formerly CloudDBA) > Performance Trends. Visualize o gráfico MySQL CPU/Memory Utilization e confirme se a utilização da CPU e da memória permanece dentro da faixa normal.