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ête dans AlloyDB pour PostgreSQL. La gestion des plans de requête suit en permanence tous les plans de requête 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 économique, 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.

Étant donné que les paramètres de requête peuvent changer à chaque exécution de requête, la sélection dynamique d'un plan de requête ne donne pas toujours 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 un changement de forfait. Bien que le plan sélectionné soit généralement l'option la plus économique, 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ête 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.

La gestion des plans de requête comporte deux composants principaux :

Dépôt de plans de requête
Lorsque vous activez la gestion des plans de requête pour votre base de données, le dépôt de plans commence à suivre l'historique des plans et les statistiques d'exécution de votre base de données. Le dépôt de plans de requête permet d'observer les performances des plans de requête.
Gestion des forfaits
Après avoir examiné les plans disponibles, le composant de gestion des plans vous permet d'en approuver un ou plusieurs pour un modèle de requête spécifique. La gestion des plans de requête suit ces plans approuvés et s'assure que, lorsque la requête est exécutée par la suite, l'optimiseur de requête n'utilise qu'un seul 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 le flag de base de données google_plan_management.enabled sur on. Pour en savoir plus, consultez Configurer des options de base de données.
  • Créez l'extension google_plan_management dans la base de données. Pour en savoir plus, consultez Activer une extension.
  • Accordez google_plan_management_role aux utilisateurs de la base de données qui souhaitent utiliser la gestion des plans de requête et gérer les plans de requête.

    1. Dans la console Google Cloud , accédez à la page Clusters 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 attribuer le rôle.

    5. Cliquez sur Exécuter.

Afficher les plans de requêtes suivis

La gestion des plans de requête fournit une vue des plans de requête qui affiche tous les plans de requête suivis, leurs temps 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 suivis historiques, exécutez la requête suivante :

SELECT * FROM google_plan_management.tracked_plans_view;

La réponse à la requête est semblable à ce qui suit :

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ête

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

Afficher les forfaits gérés

Vous pouvez afficher toutes les requêtes et tous les plans gérés par la gestion des plans de requête, 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 à ce qui suit :

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

Approuver un forfait

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ête 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ête afin d'approuver un ou plusieurs plans de requête pour une requête donnée.

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

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 plan le mieux adapté à 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 forfait

Vous pouvez refuser n'importe quel plan approuvé pour une requête et empêcher la gestion de plan de requête d'appliquer le plan à la requête. Les forfaits refusés ne sont pas supprimés et sont disponibles dans la liste des forfaits 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 forfait approuvé, il n'apparaît plus dans la liste des forfaits 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 d'utiliser les plans approuvés

Si vous souhaitez arrêter temporairement d'utiliser les plans approuvés pour vos requêtes, vous devez désactiver l'indicateur de base de données google_plan_management.enable_steer_plans. Cette option est activée par défaut. Pour en savoir plus, consultez Configurer des options de base de données.

Limites

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

Étapes suivantes