Comprendre la gestion des plans de requêtes Aurora PostgreSQL - Amazon Aurora

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Comprendre la gestion des plans de requêtes Aurora PostgreSQL

Lorsque la gestion des plans de requêtes est activée pour votre cluster de bases de données Aurora PostgreSQL, l'optimiseur génère et stocke des plans d'exécution des requêtes pour toutes les instructions SQL qu'il traite plusieurs fois. L'optimiseur définit toujours le statut du premier plan généré d'une instruction gérée sur Approved et le stocke dans la vue dba_plans.

L'ensemble de plans approuvés enregistrés pour une instruction gérée est connu comme sa référence de plans. Tandis que votre application s'exécute, il est possible que l'optimiseur génère d'autres plans pour les instructions gérées. L'optimiseur attribue le statut aux plans capturés supplémentaire Unapproved.

Par la suite, vous pouvez décider que les plans Unapproved affichent de bonnes performances et les remplacer par Approved, Rejected ou Preferred. Pour ce faire, vous devez utiliser la fonction apg_plan_mgmt.evolve_plan_baselines ou la fonction apg_plan_mgmt.set_plan_status.

Lorsque l'optimiseur génère un plan pour une instruction SQL, la gestion des plans de requêtes enregistre le plan dans la table apg_plan_mgmt.plans. Les utilisateurs de base de données auxquels le rôle apg_plan_mgmt a été attribué peuvent voir les détails du plan en interrogeant la vue apg_plan_mgmt.dba_plans. Par exemple, la requête suivante répertorie les détails des plans actuellement affichés pour un cluster de bases de données Aurora PostgreSQL hors production.

  • sql_hash – Identifiant de l'instruction SQL qui est la valeur de hachage du texte normalisé de l'instruction SQL.

  • plan_hash – Identifiant unique pour le plan qui est une combinaison de sql_hash et d'un hachage du plan.

  • status – Statut du plan. L'optimiseur peut exécuter un plan approuvé.

  • enabled – Indique si le plan est prêt à être utilisé (true) ou non (false).

  • plan_outline – Représentation du plan utilisé pour recréer le plan d'exécution réel. Les opérateurs de la structure arborescente correspondent aux opérateurs de la sortie EXPLAIN.

La vue apg_plan_mgmt.dba_plans comporte de nombreuses autres colonnes qui contiennent tous les détails du plan, tels que la date à laquelle le plan a été utilisé pour la dernière fois. Consultez Référence pour la vue apg_plan_mgmt.dba_plans pour plus de détails.

Normalisation et hachage SQL

Dans la vue apg_plan_mgmt.dba_plans, vous pouvez identifier une instruction gérée avec une valeur de hachage SQL. Le hachage SQL est calculé sur la base d'une représentation normalisée de l'instruction SQL qui élimine certaines différences, comme les valeurs littérales.

Le processus de normalisation de chaque instruction SQL préserve l'espace et la casse, afin que vous puissiez toujours lire et comprendre l'essentiel de l'instruction SQL. La normalisation supprime ou remplace les éléments suivants.

  • Principaux blocs de commentaires

  • Le mot-clé EXPLAIN et les options EXPLAIN, et EXPLAIN ANALYZE

  • Espaces de fin

  • Tous les littéraux

Prenons par exemple l'instruction suivante.

/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;

L'optimiseur normalise cette instruction comme suit.

SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;

La normalisation permet d'utiliser le même hachage SQL pour des instructions SQL similaires qui peuvent différer uniquement au niveau de leurs valeurs littérales ou de paramètres. En d'autres termes, plusieurs plans pour le même hachage SQL peuvent exister, avec un plan différent optimal dans différentes conditions.

Note

Une instruction SQL unique utilisée avec différents schémas possède des plans différents, car elle est liée au schéma spécifique au moment de l'exécution. Le planificateur utilise les statistiques pour la liaison du schéma afin de choisir le plan optimal.

Pour en savoir plus sur la façon dont l'optimiseur choisit un plan, consultez Utilisation des plans gérés Aurora PostgreSQL. Dans cette section, vous pouvez apprendre à utiliser EXPLAIN et EXPLAIN ANALYZE pour prévisualiser un plan avant qu'il ne soit réellement utilisé. Pour plus d'informations, consultez Analyse du plan choisi par l'optimiseur. Pour une image décrivant le processus de sélection d'un plan, consultez Sélection du plan à exécuter par l'optimiseur..