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 dePERSIST_PLANou/*+query_blocker=true*/ PERSIST_PLANn'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 |
|
|
Associer des indications à un modèle |
|
|
Bloquer toutes les instructions correspondant à un modèle |
|
|
Vérifier si des indications sont configurées pour une instruction |
|
|
Lister tous les modèles avec des indications |
|
|
Supprimer les indications par instruction SQL |
|
|
Supprimer les indications par valeur de signature |
|
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 |
|
|
L'identifiant de hachage du modèle |
|
|
L'indication actuellement configurée pour le modèle |
|
|
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. |
|
|
La forme paramétrée de l'instruction, avec les constantes remplacées par |
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.