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.enabledsuron. Pour en savoir plus, consultez Configurer des options de base de données. - Créez l'extension
google_plan_managementdans la base de données. Pour en savoir plus, consultez Activer une extension. Accordez
google_plan_management_roleaux 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.Dans la console Google Cloud , accédez à la page Clusters AlloyDB.
Cliquez sur l'instance requise.
Cliquez sur AlloyDB Studio, puis sur l'onglet Éditeur 1.
Saisissez la requête suivante :
GRANT google_plan_management_role TO DATABASE_USER;Remplacez
DATABASE_USERpar l'utilisateur auquel vous souhaitez attribuer le rôle.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 :
Affichez les plans suivis générés par l'optimiseur et identifiez le
logical_query_iddans la réponse.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 valeurstotal_execution_timeetnum_executions, puis choisir le plan le mieux adapté à votre requête.La colonne
planinclut 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.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_idunique de la requête. Chaque ID de requête peut être associé à plusieurs ID de plan.PLAN_ID:plan_idunique 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
- En savoir plus sur le moteur de données en colonnes AlloyDB pour PostgreSQL
- Utiliser le conseiller d'index avec Insights sur les requêtes