Gérer les plans de requête

Ce document explique comment améliorer les performances de votre plan de requête à l'aide de la gestion des plans de requêtes dans AlloyDB pour PostgreSQL. La gestion des plans de requêtes suit en permanence tous les plans de requêtes et leurs statistiques d'exécution dans votre base de données. Après avoir examiné les requêtes et les coûts associés, vous pouvez approuver un plan, qui est appliqué de manière cohérente pour une requête donnée. Cette approche garantit la sélection d'un plan de requête rentable, ce qui améliore les performances des requêtes.

Fonctionnement

Dans PostgreSQL, un optimiseur de requêtes sélectionne un plan d'exécution pour chaque requête en fonction des coûts estimés. De nombreux facteurs influencent le coût d'une requête, par exemple les paramètres de requête, la complexité de la requête, la taille de la table, les index disponibles et les ressources système.

Comme les paramètres de requête peuvent changer à chaque exécution de la requête, la sélection dynamique d'un plan de requête peut ne pas toujours donner des résultats optimaux. Lors du traitement d'une requête, l'optimiseur évalue différents plans d'exécution et tente de choisir le plan le plus rentable.

Une modification de paramètre peut entraîner une modification du plan. Bien que le plan sélectionné soit généralement l'option la plus rentable, il peut arriver qu'un plan moins rentable soit choisi, ce qui entraîne de mauvaises performances des requêtes. La gestion des plans de requêtes vous aide à comprendre les modèles et les plans produits par l'optimiseur, et vous permet d'afficher chaque plan pour prendre des décisions éclairées.

Les deux principaux composants de la gestion des plans de requêtes sont les suivants :

Dépôt de plans de requêtes
Lorsque vous activez la gestion des plans de requêtes pour votre base de données, le dépôt de plans commence à suivre les plans historiques et les statistiques d'exécution de votre base de données. Le dépôt de plans de requêtes fournit une observabilité des performances du plan de requête.
Gestion des plans
Après avoir examiné les plans disponibles, le composant de gestion des plans vous permet d'approuver un ou plusieurs plans pour un modèle de requête spécifique. La gestion des plans de requêtes suit ces plans approuvés et s'assure que lorsque la requête est exécutée par la suite, l'optimiseur de requêtes n'utilise que l'un des plans approuvés. Si plusieurs plans sont approuvés, AlloyDB sélectionne et exécute le plan dont le coût estimé est le plus faible.

Avant de commencer

  • Définissez l'indicateur de base de données google_plan_management.enabled sur on. Pour en savoir plus, consultez la page Configurer des options de base de données flags.
  • Créez l'extension google_plan_management dans la base de données. Pour en savoir plus, consultez la page Activer une extension.
  • Accordez le rôle google_plan_management_role aux utilisateurs de la base de données qui souhaitent utiliser la gestion des plans de requêtes et gérer les plans de requêtes.

    1. Dans la Google Cloud console, accédez à la page Clusters d'AlloyDB.

      accéder aux clusters

    2. Cliquez sur l'instance requise.

    3. Cliquez sur AlloyDB Studio, puis sur l'onglet Éditeur 1.

    4. Saisissez la requête suivante :

      GRANT google_plan_management_role TO DATABASE_USER;
      

      Remplacez DATABASE_USER par l'utilisateur auquel vous souhaitez accorder le rôle.

    5. Cliquez sur Exécuter.

Afficher les plans de requêtes suivis

La gestion des plans de requêtes fournit une vue des plans de requêtes qui affiche tous les plans de requêtes suivis, leurs durées d'exécution et d'autres informations. Un plan de requête suivi est un plan de requête généré par l'optimiseur et stocké dans le dépôt de plans.

Pour afficher les plans historiques suivis, exécutez la requête suivante :

SELECT * FROM google_plan_management.tracked_plans_view;

La réponse à la requête est semblable à la suivante :

db_id                | 5
db_name              | postgres
user_id              | 16392
user_name            | postgres
logical_query_id     | 15480571796188147798
plan_id              | 4740866759615354783
query                | SELECT c1, c2, c3 FROM t1 WHERE c1 = 1;
plan                 | Seq Scan on public.t1                                                                                                                                                            +
                     |   Output: c1, c2, c3                                                                                                                                                             +
                     |   Filter: (t1.c1 = ?)
total_execution_time | 0.003937501
num_executions       | 1
creation_time        | 2024-11-06 16:52:25.200737+00
last_used_time       | 2024-11-06 16:52:25.200737+00

Désactiver le suivi des plans de requêtes

Si vous ne souhaitez pas que la gestion de plan de requête suive les plans de requêtes générés par l'optimiseur, vous devez désactiver l'indicateur de base de données google_plan_management.enable_track_plans. Ce flag est activé par défaut, et nous vous recommandons de le laisser activé. Pour en savoir plus, consultez la page Configurer des options de base de données.

Afficher les plans gérés

Vous pouvez afficher toutes les requêtes et tous les plans gérés par la gestion des plans de requêtes, y compris les plans approuvés et refusés.

Pour afficher les plans gérés, exécutez la requête suivante :

SELECT * FROM google_plan_management.managed_plans_view;

La réponse à la requête est semblable à la suivante :

db_id            | 5
db_name          | postgres
user_id          | 16392
user_name        | postgres
logical_query_id | 15480571796188147798
plan_id          | 4740866759615354783
status           | approved

Approuver un plan

L'optimiseur sélectionne un plan de requête de manière dynamique, ce qui signifie qu'il peut choisir différents plans de requêtes pour la même requête à différents moments. Pour appliquer une sélection de plan cohérente, vous pouvez utiliser la gestion des plans de requêtes pour approuver un ou plusieurs plans de requêtes pour une requête donnée.

Si vous approuvez plusieurs plans, la gestion des plans de requêtes compare tous les plans approuvés et sélectionne le plan le plus rentable pour l'exécution de la requête.

Pour évaluer et approuver un plan pour une requête, procédez comme suit :

  1. Affichez les plans suivis générés par l' optimiseur et identifiez le logical_query_id dans la réponse.

  2. Examinez tous les plans générés pour le logical_query_id. Vous pouvez calculer le temps d'exécution moyen de chaque plan à l'aide des valeurs total_execution_time et num_executions, puis choisir le meilleur plan pour votre requête.

    La colonne plan inclut d'autres détails tels que l'index utilisé ou la méthode de tri utilisée, qui peuvent vous aider à choisir un plan de requête.

  3. Approuvez le plan que vous souhaitez appliquer à la requête en exécutant la requête suivante :

      SELECT google_plan_management.approve_plan(QUERY_ID, PLAN_ID);
    

    Remplacez les éléments suivants :

    • QUERY_ID: logical_query_id unique de la requête. Chaque ID de requête peut être associé à plusieurs ID de plan.
    • PLAN_ID : plan_id unique de la requête.

Refuser un plan

Vous pouvez refuser tout plan approuvé pour une requête et empêcher la gestion des plans de requêtes d'appliquer le plan à la requête. Les plans refusés ne sont pas supprimés et sont disponibles dans la liste des plans suivis.

Pour refuser un plan approuvé, exécutez la requête suivante :

    SELECT google_plan_management.deny_plan(QUERY_ID, PLAN_ID);

Supprimer un plan approuvé

Vous pouvez supprimer un plan approuvé du dépôt de plans. Lorsque vous supprimez un plan approuvé, il n'apparaît plus dans la liste des plans gérés.

Pour supprimer un plan approuvé, exécutez la requête suivante :

    SELECT google_plan_management.update_plan_status(QUERY_ID, PLAN_ID, 'delete');

Arrêter temporairement l'utilisation des plans approuvés

Si vous souhaitez arrêter temporairement l'utilisation des plans approuvés pour vos requêtes, vous devez désactiver l'indicateur de base de données google_plan_management.enable_steer_plans. Ce flag est activé par défaut. Pour en savoir plus, consultez la page Configurer des options de base de données flags.

Limites

  • Vous ne pouvez pas utiliser la gestion des plans de requêtes dans les tables partitionnées ni dans les ensembles de regroupement.
  • La gestion des plans de requêtes n'est compatible qu'avec l'instance principale.
  • Le dépôt de plans de requêtes peut stocker jusqu'à 100 000 plans uniques et ne fournit pas de règle de conservation.

Étape suivante