Em cargas de trabalho de consultas pontuais com alta concorrência, a compilação e a otimização de SQL tornam-se gargalos de desempenho. O PlanCache resolve esse problema ao armazenar em cache o plano de execução na primeira execução da consulta. Assim, consultas subsequentes com o mesmo padrão SQL reutilizam o plano em cache, evitando nova compilação. Isso elimina a sobrecarga de recompilação e reduz a latência das consultas em grande escala.
O PlanCache foi projetado exclusivamente para consultas pontuais de alta concorrência. Não recomendamos seu uso para outros tipos de consulta.
Como funciona
Consultas pontuais (por exemplo, SELECT * FROM tbl WHERE id = ?) possuem planos de execução estáveis: o caminho de acesso ideal não muda conforme o valor específico do parâmetro. O PlanCache aproveita essa característica ao armazenar o plano em cache na primeira execução e reutilizá-lo em todas as consultas subsequentes que correspondem ao mesmo padrão SQL. Para consultas com predicados complexos, junções ou agregações, o plano ideal geralmente varia conforme a distribuição dos dados; portanto, o PlanCache não se aplica nesses casos.
Pré-requisitos
Antes de começar, verifique se:
A versão secundária do cluster é 3.1.10.0 ou posterior
Para verificar ou atualizar a versão secundária, faça login no console do AnalyticDB for MySQL e acesse a seção Configuration Information na página Cluster Information. Para mais detalhes, consulte Atualizar a versão secundária de um cluster.
Ativar ou desativar o PlanCache
O PlanCache vem desativado por padrão. Execute os comandos abaixo para ativá-lo ou desativá-lo.
Ativar o PlanCache:
SET ADB_CONFIG O_SPC_SCOPE=POINT_QUERY;
Desativar o PlanCache:
SET ADB_CONFIG O_SPC_SCOPE=NONE;
Exemplo
O exemplo a seguir demonstra como o PlanCache reduz a sobrecarga de compilação em uma consulta pontual de alta concorrência.
Considere o seguinte padrão de consulta:
SELECT * FROM tbl0 WHERE col0 = ?;
-
Ative o PlanCache.
SET ADB_CONFIG O_SPC_SCOPE=POINT_QUERY; -
Execute a consulta. O AnalyticDB for MySQL compila o plano de execução e o armazena em cache.
SELECT * FROM tbl0 WHERE col0 = 666; -
Execute uma consulta com o mesmo padrão SQL. O sistema reutiliza automaticamente o plano de execução em cache, ignorando as etapas de compilação e otimização.
SELECT * FROM tbl0 WHERE col0 = 777;