O Fast Query Cache é um mecanismo de cache nativo do PolarDB que aumenta as consultas por segundo (QPS) em cargas de trabalho com predominância de leituras. Ele armazena conjuntos de resultados e atende a consultas repetidas diretamente da memória, sem precisar analisar, otimizar ou executar o SQL novamente.
Como funciona
Quando uma consulta é executada, o Fast Query Cache armazena seu conjunto de resultados. Se a mesma consulta for executada novamente antes da alteração dos dados subjacentes, o sistema retorna imediatamente o resultado em cache. A modificação dos dados invalida o cache automaticamente.
O Fast Query Cache resolve três limitações principais do cache de consultas nativo do MySQL:
|
Limitação |
Como o Fast Query Cache resolve |
|
Gargalo de concorrência: O cache de consultas nativo do MySQL usa um bloqueio global que serializa o acesso sob alta concorrência e degrada ainda mais o desempenho conforme aumenta o número de núcleos de CPU. |
Substitui o bloqueio global por um mecanismo de sincronização sem bloqueios, permitindo que vários núcleos de CPU processem consultas em paralelo sem contenção. |
|
Recuperação de memória ineficiente: O cache nativo pré-aloca um bloco de memória fixo e não consegue recuperá-lo com eficiência, resultando em subutilização da memória. |
Usa alocação dinâmica de memória para recuperar entradas de cache inválidas imediatamente, mantendo o uso de memória enxuto e flexível. |
|
Degradação de desempenho com baixas taxas de acerto: O cache nativo adiciona sobrecarga que pode tornar as consultas mais lentas quando a taxa de acerto do cache é baixa. |
Monitora as taxas de acerto em tempo real e ajusta dinamicamente sua política de cache para manter o desempenho estável, mesmo quando as taxas caem ou a carga mistura leituras e gravações. |
O cache de consultas nativo foi removido no MySQL 8.0. O Fast Query Cache é a substituição desenvolvida especificamente para o PolarDB.
Versões compatíveis
O Fast Query Cache está disponível nas seguintes versões de revisão do PolarDB for MySQL:
|
Versão do PolarDB |
Versão de revisão mínima |
|
PolarDB for MySQL 8.0 |
8.0.1.1.5 |
|
PolarDB for MySQL 5.7 |
5.7.1.0.15 |
|
PolarDB for MySQL 5.6 |
5.6.1.0.29 |
Para verificar a versão de revisão do seu cluster, consulte Consultar a versão do mecanismo.
Quando usar o Fast Query Cache
O Fast Query Cache oferece o maior benefício quando:
A carga de trabalho tem predominância de leituras, com volume significativamente maior de leituras do que de gravações.
As consultas se repetem frequentemente, mantendo a taxa de acerto do cache elevada (acima de ~60%).
Um grande volume de solicitações de leitura simultâneas se beneficia do atendimento via memória.
Evite ativar o Fast Query Cache ou defina-o como modo DEMAND quando:
O throughput de gravação for alto ou os dados mudarem frequentemente. Ativar o cache nesse cenário pode reduzir o QPS em aproximadamente 2%.
Poucas consultas se repetirem, resultando em uma taxa de acerto do cache permanentemente baixa.
Ative o Fast Query Cache
Cada especificação de cluster do PolarDB inclui uma capacidade de memória pré-alocada para o Fast Query Cache. Para ativar o recurso, defina o parâmetro apropriado na configuração do seu cluster ou nó. Para obter instruções, consulte Especificar parâmetros de cluster e nó.
|
Versão do PolarDB |
Parâmetro |
Valor a definir |
|
PolarDB for MySQL 8.0 |
|
|
|
PolarDB for MySQL 5.6 ou 5.7 |
|
|
Gerencie o Fast Query Cache
Controlar o comportamento de cache com loose_query_cache_type
Use loose_query_cache_type para controlar se o Fast Query Cache estará sempre ativo, opcional ou desativado. Defina esse parâmetro no nível do cluster ou substitua-o no nível de sessão para cargas de trabalho específicas.
|
Valor |
Comportamento |
|
|
O Fast Query Cache fica desativado. |
|
|
O Fast Query Cache permanece ativo para todas as consultas. Adicione |
|
|
O Fast Query Cache fica inativo por padrão. Adicione |
Escolha o modo adequado à sua carga de trabalho:
Alto throughput de gravação ou atualizações frequentes de dados: use
OFFpara evitar a sobrecarga do cache.Muitas consultas lentas repetidas ou alta taxa de acerto: utilize
ONpara maximizar os ganhos de QPS.Carga mista em que apenas algumas consultas se beneficiam: opte por
DEMANDe adicioneSQL_CACHEàs consultas que se repetem frequentemente:
SELECT SQL_CACHE id, name FROM customer;
Controlar o tempo de vida das entradas de cache com query_cache_lease_time
O Fast Query Cache recupera memória dinamicamente. Caso um conjunto de resultados em cache permaneça sem referência durante o período especificado por query_cache_lease_time (em segundos), o sistema libera a entrada e recupera sua memória.
O valor padrão é 3600 segundos (1 hora).
Benchmarks de desempenho
O benchmark a seguir mostra o impacto no QPS ao ativar o Fast Query Cache (PolarDB-QC) em comparação com a opção desativada (QC-OFF).
Ambiente de teste:
|
Parâmetro |
Valor |
|
Cluster |
PolarDB for MySQL 8.0 Cluster Edition, 8 núcleos, 64 GB de memória |
|
Memória de cache |
4 GB |
|
Ferramenta de teste |
Sysbench |
|
Dados de teste |
25 tabelas × 40.000 linhas; 25 tabelas × 400.000 linhas |
|
Casos de teste |
|
Todos os resultados baseiam-se exclusivamente no nó primário.
Resumo dos resultados:
|
Cenário |
Taxa de acerto do cache |
Variação do QPS |
|
Alta taxa de acerto (Casos 1, 3, 4, 5, 7) |
63%–99% |
+53% a +106% |
|
Baixa taxa de acerto (Casos 2, 6) |
Baixa |
-3% ou menos |
|
Tráfego misto de leitura e gravação |
— |
-2% ou menos |
O Caso 7 (oltp_point_select especial, 400.000 linhas) atinge uma taxa de acerto de 99% e apresenta a maior melhoria de QPS.
Casos de teste e gráficos:
Caso 1: 25 tabelas × 40.000 linhas, rand-type = special, oltp_read_only

Caso 2: 25 tabelas × 40.000 linhas, rand-type = uniform, oltp_read_only

Caso 3: 25 tabelas × 40.000 linhas, rand-type = special, oltp_point_select

Caso 4: 25 tabelas × 40.000 linhas, rand-type = uniform, oltp_point_select

Caso 5: 25 tabelas × 400.000 linhas, rand-type = special, oltp_read_only

Caso 6: 25 tabelas × 400.000 linhas, rand-type = uniform, oltp_read_only

Caso 7: 25 tabelas × 400.000 linhas, rand-type = special, oltp_point_select

Caso 8: 25 tabelas × 400.000 linhas, rand-type = uniform, oltp_point_select

Caso 9: 25 tabelas × 400.000 linhas, rand-type = special, oltp_read_write

Compatibilidade
O Fast Query Cache é compatível com o recurso de consistência global (modo de alto desempenho). No entanto, se ambos estiverem ativos simultaneamente e a otimização MTT para consistência global (modo de alto desempenho) também estiver ativada, a otimização MTT ficará inativa.
Para obter detalhes sobre a consistência global (modo de alto desempenho), consulte Visão geral.