Recursos e casos de uso
Benefícios:
Reduz a utilização da CPU.
Diminui o uso de IOPS em determinados cenários.
Reduz o tempo de resposta das consultas e aumenta o throughput do sistema.
Casos de uso:
Tabelas com dados estáticos ou modificações pouco frequentes.
Cargas de trabalho com consultas SELECT idênticas e frequentes.
Consultas que retornam conjuntos de resultados menores que 1 MB.
Ativar o cache de consultas não garante melhoria de desempenho. Em alguns cenários, como cargas de trabalho com muitas consultas exclusivas, essa ativação pode degradar o desempenho.
Funcionamento
O ApsaraDB RDS for MySQL calcula um hash para cada consulta SELECT recebida e usa esse valor para localizar um resultado correspondente no cache de consultas.
Quando há uma correspondência (cache hit), o servidor retorna o conjunto de resultados armazenado diretamente ao cliente, sem analisar ou executar a consulta.
Se nenhuma correspondência for encontrada (cache miss), o servidor executa a consulta e armazena o hash e o conjunto de resultados no cache de consultas.
Caso os dados sejam alterados em uma tabela usada por uma consulta em cache, o ApsaraDB RDS for MySQL invalida todos os resultados relacionados no cache de consultas.
Limitações
As consultas precisam ser idênticas byte a byte para gerar um cache hit. Qualquer diferença, inclusive em maiúsculas/minúsculas, espaços em branco, banco de dados selecionado, versão do protocolo ou conjunto de caracteres, faz com que as consultas sejam tratadas como distintas.
O cache de consultas não armazena resultados de subconsultas, apenas o conjunto de resultados final da consulta externa.
Consultas dentro de funções armazenadas, procedimentos armazenados, gatilhos ou eventos não são armazenadas em cache.
Consultas com funções não determinísticas, como now(), curdate(), last_insert_id() e rand(), não são armazenadas em cache.
Consultas que acessam tabelas nos bancos de dados de sistema mysql, information_schema ou performance_schema não são armazenadas em cache.
Consultas que usam tabelas temporárias não são armazenadas em cache.
Consultas que geram avisos não são armazenadas em cache.
Os seguintes tipos de consulta não são armazenados em cache: SELECT ... LOCK IN SHARE MODE, SELECT ... FOR UPDATE e SELECT * FROM ... WHERE autoincrement_col IS NULL.
Consultas que usam variáveis definidas pelo usuário não são armazenadas em cache.
Consultas que incluem a dica SQL_NO_CACHE não são armazenadas em cache.
Configuração
-
Configurações de parâmetros
Configure os parâmetros do console conforme descrito abaixo.
query_cache_limit(Unidade: byte): Tamanho máximo de um único conjunto de resultados de consulta armazenável no cache de consultas. O valor padrão é 1 MB. Conjuntos de resultados maiores que esse valor não são armazenados em cache.query_cache_size(Unidade: byte): Tamanho total do cache de consultas. O valor padrão é 3 MB.-
query_cache_type: Define se o cache de consultas deve ser ativado.0: Desativa o cache de consultas.1: Ativa o cache de consultas. Consultas iniciadas comSELECT SQL_NO_CACHEnão são armazenadas em cache.2: Ativa o cache de consultas para uso sob demanda. Apenas consultas iniciadas comSELECT SQL_CACHEsão armazenadas em cache. No painel de navegação à esquerda, clique em Parameter Settings. Na lista de parâmetros, localize e modifiquequery_cache_typepara o valor desejado. Essa alteração exige a reinicialização da instância. Também é possível modificar parâmetros relacionados, comoquery_cache_limit(intervalo: 1 a 1.048.576) equery_cache_size(intervalo: 0 a 104.857.600). Para obter uma descrição detalhada de um parâmetro, clique no ícone de informações ao lado dele.
ImportanteAlterar o parâmetro query_cache_type exige a reinicialização da instância, que ocorre automaticamente após você aplicar a mudança.
O valor do parâmetro
query_cache_sizedeve ser múltiplo de 1024. Caso contrário, o sistema retorna o erro "The specified parameter is invalid" com o código de erroInvalidParameters.Malformed.
-
Enable
O cache de consultas é ativado quando
query_cache_sizeé maior que 0 equery_cache_typeestá definido como1ou2. -
Disable
Para desativar o cache de consultas, defina
query_cache_sizecomo 0 ouquery_cache_typecomo0. -
Recommendations
Evite definir query_cache_size com valores muito altos. Um cache grande consome memória que outros componentes da instância poderiam usar e também aumenta a sobrecarga de busca no cache. Recomendamos definir um valor inicial entre 10 MB e 100 MB com base nas especificações da sua instância e ajustá-lo posteriormente conforme o uso em tempo de execução.
Recomendamos ajustar
query_cache_sizepara ativar ou desativar o cache de consultas, pois modificarquery_cache_typeexige a reinicialização da instância.O cache de consultas é adequado apenas para cenários específicos. Recomendamos testá-lo exaustivamente antes de ativá-lo em ambiente de produção para evitar possível degradação de desempenho.
Verificar os resultados
No Console, escolha Database Autonomy Service (DAS) > Performance Trends no painel de navegação à esquerda. Visualize o gráfico MySQL CPU/Memory Utilization para confirmar se a utilização da CPU e da memória está dentro dos intervalos normais.
-
SQL command
Execute o seguinte comando para verificar o status do cache de consultas:
show global status like ‘Qca%’;Qcache_hits: Número de acertos no cache.Qcache_inserts: Quantidade de consultas adicionadas ao cache.Qcache_not_cached: Total de consultas não armazenáveis em cache.Qcache_queries_in_cache: Número de consultas presentes atualmente no cache de consultas.
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 | +-------------------------+------------+