La gestion des plans de requête dans AlloyDB pour PostgreSQL vous permet d'améliorer et de stabiliser les performances des requêtes en contrôlant les plans d'exécution que l'optimiseur de requêtes utilise pour vos requêtes. La gestion des plans de requête suit en continu tous les plans de requête et leurs statistiques d'exécution dans votre base de données. Après avoir examiné les plans et leurs coûts, vous pouvez approuver ceux que vous souhaitez qu'AlloyDB utilise pour une requête. Cela vous aide à éviter les ralentissements qui se produisent lorsque l'optimiseur passe à un plan moins rentable.
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 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.
La modification d'un 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 de requête. 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.
Les deux principaux composants de la gestion des plans de requête sont les suivants :
- 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 sur votre base de données. Le dépôt de plans de requête fournit une observabilité sur les performances des plans de requête.
- Gestion du forfait
- 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ête suit ces plans approuvés et s'assure que, lors de l'exécution ultérieure de la requête, 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 celui dont le coût estimé est le plus bas.
Avant de commencer
- Définissez l'indicateur 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_managementsur 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 d'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ête 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 l'historique des plans suivis, exécutez la requête suivante :
SELECT * FROM google_plan_management.tracked_plans_view;
La réponse à la requête se présente comme 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 du plan 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, et nous vous recommandons de la laisser activée. Pour en savoir plus, consultez la page Configurer des indicateurs 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 de plan 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 se présente comme suit :
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ête pour la même requête à différents moments. Pour appliquer une sélection de plan cohérente, vous pouvez utiliser la gestion de plan de requête pour approuver un ou plusieurs plans de requête pour une requête donnée.
Si vous approuvez plusieurs plans, la gestion de plan de requête 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 :
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
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 meilleur plan pour votre requête.La colonne
planinclut d'autres détails, tels que l'index ou la méthode de tri utilisés, 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 plan
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 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 d'utiliser les forfaits approuvés
Si vous souhaitez arrêter temporairement d'utiliser 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.
Cette option est activée par défaut. Pour en savoir plus, consultez la page Configurer des options de base de données.
Limites
- Vous ne pouvez pas utiliser la gestion de plan de requête dans les tables partitionnées ni dans les ensembles de regroupement.
- La gestion des plans de requête n'est possible 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.