O Persist plan e o Query blocker oferecem controle direto sobre a execução de instruções SQL parametrizadas no AnalyticDB for MySQL. Use o Persist plan para fixar hints específicos do otimizador em um padrão de instrução e o Query blocker para interceptar e bloquear instruções correspondentes ao mesmo padrão, funcionando como um firewall SQL. Ambos os recursos exigem a versão V3.1.4 ou posterior.
Funcionamento
O AnalyticDB for MySQL identifica instruções com a mesma estrutura por meio da parametrização. Esse processo substitui constantes em cláusulas como WHERE e LIMIT por pontos de interrogação (?). Cada estrutura única, chamada padrão, recebe um valor sign — um identificador hash para esse padrão.
O Persist plan associa hints do otimizador a um padrão. O sistema executa toda instrução correspondente ao padrão com esses hints aplicados, sem modificar o SQL original.
O Query blocker opera de forma similar, mas rejeita todas as instruções correspondentes ao padrão em vez de ajustar a execução.
A ativação de recursos avançados de otimização em um cluster pode afetar diversas instruções. Use o Persist plan para controlar quais hints se aplicam às instruções que compartilham o mesmo padrão.
A execução dePERSIST_PLANou/*+query_blocker=true*/ PERSIST_PLANnão executa a instrução SQL alvo, apenas armazena a configuração de hints.
Quando usar cada recurso
|
Situação |
Recurso |
|
O otimizador escolhe um plano de execução subótimo para um grupo de consultas similares |
Persist plan |
|
Um conjunto de consultas similares causa problemas de desempenho e requer interrupção imediata |
Query blocker |
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster AnalyticDB for MySQL com a versão V3.1.4 ou posterior
Acesso a um cliente MySQL (necessário para
PERSIST_PLAN_CHECK— o Data Management (DMS) não retorna resultados para este comando)
Referência de sintaxe
|
Operação |
Sintaxe |
|
Gerar o padrão e o valor sign para uma instrução |
|
|
Associar hints a um padrão |
|
|
Bloquear todas as instruções correspondentes a um padrão |
|
|
Verificar se há hints configurados para uma instrução |
|
|
Listar todos os padrões com hints |
|
|
Remover hints por instrução SQL |
|
|
Remover hints por valor sign |
|
Exemplos de Persist plan
Gerar um padrão e valor sign
Execute PARAMETERIZE em uma instrução para ver como o AnalyticDB for MySQL a normaliza e qual valor sign ela recebe:
PARAMETERIZE
SELECT t1.c1
FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;
Resultado:
|
Sign |
Pattern |
|
2506ed2c1f53ea59a1ef996a98a50411 |
SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ? |
O valor sign identifica exclusivamente este padrão. Use-o para remover um Persist plan sem precisar especificar novamente o SQL completo.
Associar hints a um padrão
Para aplicar o algoritmo nested_loop_join a todas as instruções correspondentes ao padrão:
/*+nested_loop_join=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;
Bloquear instruções correspondentes a um padrão
Para interceptar todas as instruções correspondentes a um padrão:
/*+query_blocker=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;
Remover um Persist plan
Há dois métodos disponíveis.
Por instrução SQL:
DELETE_PLAN
SELECT t1.c1
FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;
Por valor sign:
DELETE_PLAN_BY_SIGN 2506ed2c1f53ea59a1ef996a98a50411;
Para obter o valor sign de um padrão, execute PARAMETERIZE $sql ou consulte INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY.
Verificar e monitorar Persist plans
Verificar hints em uma instrução específica
Execute PERSIST_PLAN_CHECK para confirmar se um Persist plan está configurado e ver quantas vezes foi aplicado:
PERSIST_PLAN_CHECK
SELECT t1.c1
FROM t1
INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;
Resultado:
|
Sign |
Hint |
hitApplied |
Pattern |
|
2506ed2c1f53ea59a1ef996a98a50411 |
nested_loop_join=true |
12 |
SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ? |
Descrição dos campos:
|
Campo |
Descrição |
|
|
Identificador hash do padrão |
|
|
Hint configurado atualmente para o padrão |
|
|
Número de vezes que o padrão foi correspondido desde a criação ou última atualização do Persist plan. Reinicia para 0 após cada atualização. |
|
|
Forma parametrizada da instrução, com constantes substituídas por |
O comando PERSIST_PLAN_CHECK não retorna resultados quando executado no Data Management (DMS). Execute-o em um cliente MySQL para visualizar a saída.
Listar todos os padrões configurados
SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY;
Esta consulta retorna todos os padrões com Persist plans configurados atualmente, além de seus hints e valores sign.