Tous les produits
Search
Centre de documentation

AnalyticDB:Persist plan et Query-Blocker

Dernière mise à jour :Aug 10, 2026

Les fonctionnalités Persist plan et Query blocker vous offrent un contrôle direct sur l'exécution des instructions SQL paramétrées par AnalyticDB for MySQL. Utilisez Persist plan pour verrouiller des indications d'optimiseur (hints) spécifiques à un modèle de requête, et Query blocker pour intercepter et bloquer les instructions correspondant au même modèle, agissant ainsi comme un pare-feu SQL. Ces deux fonctionnalités nécessitent la version V3.1.4 ou ultérieure.

Fonctionnement

AnalyticDB for MySQL identifie les instructions partageant la même structure en les paramétrant : il remplace les constantes dans les clauses telles que WHERE et LIMIT par des points d'interrogation (?). Chaque structure unique, appelée modèle, reçoit une valeur de signature (sign value), qui est un identifiant de hachage pour ce modèle.

Un persist plan associe des indications d'optimiseur à un modèle. Toutes les instructions correspondant à ce modèle s'exécutent avec ces indications appliquées, sans modifier le code SQL original.

Un query blocker fonctionne de manière similaire, mais au lieu d'optimiser l'exécution, il rejette toute instruction correspondant au modèle.

Lorsque des fonctionnalités d'optimisation avancées sont activées sur un cluster, un large éventail d'instructions peut être concerné. Utilisez Persist plan pour contrôler les indications appliquées aux instructions partageant le même modèle.
L'exécution de PERSIST_PLAN ou /*+query_blocker=true*/ PERSIST_PLAN n'exécute pas l'instruction SQL cible. Elle stocke uniquement la configuration des indications.

Quand utiliser chaque fonctionnalité

Situation

Fonctionnalité

L'optimiseur choisit un plan d'exécution sous-optimal pour un groupe de requêtes similaires

Persist plan

Un groupe de requêtes similaires provoque des problèmes de performance et doit être arrêté immédiatement

Query blocker

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un cluster AnalyticDB for MySQL exécutant la version V3.1.4 ou ultérieure

  • L'accès à un client MySQL (requis pour PERSIST_PLAN_CHECK — Data Management (DMS) ne renvoie pas de résultats pour cette commande)

Référence de syntaxe

Opération

Syntaxe

Générer le modèle et la valeur de signature pour une instruction

PARAMETERIZE $sql

Associer des indications à un modèle

/*+hints*/ PERSIST_PLAN $sql

Bloquer toutes les instructions correspondant à un modèle

/*+query_blocker=true*/ PERSIST_PLAN $sql

Vérifier si des indications sont configurées pour une instruction

PERSIST_PLAN_CHECK $sql

Lister tous les modèles avec des indications

SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY

Supprimer les indications par instruction SQL

DELETE_PLAN $sql

Supprimer les indications par valeur de signature

DELETE_PLAN_BY_SIGN $Sign

Exemples de Persist plan

Générer un modèle et une valeur de signature

Exécutez PARAMETERIZE sur une instruction pour voir comment AnalyticDB for MySQL la normalise et quelle valeur de signature elle obtient :

PARAMETERIZE
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Résultat :

Signature

Modèle

2506ed2c1f53ea59a1ef996a98a50411

SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?

La valeur de signature identifie de manière unique ce modèle. Utilisez-la pour supprimer un persist plan sans avoir à spécifier à nouveau l'intégralité du code SQL.

Associer des indications à un modèle

Pour appliquer l'algorithme nested_loop_join à toutes les instructions correspondant au modèle :

/*+nested_loop_join=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Bloquer les instructions correspondant à un modèle

Pour intercepter toutes les instructions correspondant à un modèle :

/*+query_blocker=true*/
PERSIST_PLAN
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Supprimer un persist plan

Deux méthodes sont disponibles.

Par instruction SQL :

DELETE_PLAN
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Par valeur de signature :

DELETE_PLAN_BY_SIGN 2506ed2c1f53ea59a1ef996a98a50411;

Pour obtenir la valeur de signature d'un modèle, exécutez PARAMETERIZE $sql ou interrogez INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY.

Vérification et surveillance des persist plans

Vérifier les indications sur une instruction spécifique

Exécutez PERSIST_PLAN_CHECK pour confirmer qu'un persist plan est configuré et voir combien de fois il a été appliqué :

PERSIST_PLAN_CHECK
SELECT t1.c1
FROM t1
    INNER JOIN t2 ON t1.c1 = t2.c1
WHERE t1.c2 < 9999;

Résultat :

Signature

Indication

hitApplied

Modèle

2506ed2c1f53ea59a1ef996a98a50411

nested_loop_join=true

12

SELECT t1.c1 FROM t1 INNER JOIN t2 ON t1.c1 = t2.c1 WHERE t1.c2 < ?

Description des champs :

Champ

Description

Sign

L'identifiant de hachage du modèle

Hint

L'indication actuellement configurée pour le modèle

hitApplied

Le nombre de fois où le modèle a été mis en correspondance depuis la création ou la dernière mise à jour du persist plan. Ce compteur est réinitialisé à 0 après chaque mise à jour.

Pattern

La forme paramétrée de l'instruction, avec les constantes remplacées par ?

Important

PERSIST_PLAN_CHECK ne renvoie pas de résultats lorsqu'il est exécuté dans Data Management (DMS). Exécutez-le depuis un client MySQL pour voir la sortie.

Lister tous les modèles configurés

SELECT * FROM INFORMATION_SCHEMA.KEPLER_PERSIST_PLAN_SUMMARY;

Cette requête renvoie tous les modèles ayant actuellement des persist plans configurés, ainsi que leurs indications et valeurs de signature.