Todos os produtos
Search
Central de documentação

AnalyticDB:Persist plan e Query-Blocker

Última atualização: Jun 27, 2026

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 de PERSIST_PLAN ou /*+query_blocker=true*/ PERSIST_PLAN nã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

PARAMETERIZE $sql

Associar hints a um padrão

/*+hints*/ PERSIST_PLAN $sql

Bloquear todas as instruções correspondentes a um padrão

/*+query_blocker=true*/ PERSIST_PLAN $sql

Verificar se há hints configurados para uma instrução

PERSIST_PLAN_CHECK $sql

Listar todos os padrões com hints

SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY

Remover hints por instrução SQL

DELETE_PLAN $sql

Remover hints por valor sign

DELETE_PLAN_BY_SIGN $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

Sign

Identificador hash do padrão

Hint

Hint configurado atualmente para o padrão

hitApplied

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.

Pattern

Forma parametrizada da instrução, com constantes substituídas por ?

Importante

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.