Suppression des plans de SQL requête Aurora Postgre - 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.

Suppression des plans de SQL requête Aurora Postgre

Supprimez les plans d'exécution que vous n'utilisez pas ou les plans non valides. Pour plus d'informations sur la suppression de plans, consultez les sections suivantes.

Suppression de plans

Les plans sont automatiquement supprimés s'ils n'ont pas été utilisés depuis plus d'un mois, plus précisément 32 jours. Il s'agit de la valeur par défaut du paramètre apg_plan_mgmt.plan_retention_period. Vous pouvez modifier la période de conservation du plan en la prolongeant ou en la raccourcissant à partir de la valeur 1. La détermination du nombre de jours depuis qu'un plan a été utilisé est calculée en soustrayant la date last_used de la date actuelle. La date last_used correspond à la date la plus récente à laquelle l'optimiseur a choisi un plan en tant que plan à coût minimal ou à laquelle le plan a été exécuté. La date est enregistrée pour le plan dans la vue apg_plan_mgmt.dba_plans.

Nous vous recommandons de supprimer des plans qui n'ont pas été utilisés depuis longtemps ou qui ne sont pas utiles. Chaque plan possède une date last_used que l'optimiseur met à jour chaque fois qu'il exécute un plan ou le choisit en tant que plan à coût minimal pour une instruction. Vérifiez les dernières dates last_used pour identifier les plans que vous pouvez supprimer en toute sécurité.

La requête suivante renvoie une table à trois colonnes indiquant le nombre total de plans, les plans qui n'ont pas pu être supprimés et les plans supprimés avec succès. Elle comprend une requête imbriquée qui est un exemple d'utilisation de la fonction apg_plan_mgmt.delete_plan pour supprimer tous les plans qui n'ont pas été choisis en tant que plan à coût minimal au cours des 31 derniers jours et son statut n'est pas Rejected.

SELECT (SELECT COUNT(*) from apg_plan_mgmt.dba_plans) total_plans, COUNT(*) FILTER (WHERE result = -1) failed_to_delete, COUNT(*) FILTER (WHERE result = 0) successfully_deleted FROM ( SELECT apg_plan_mgmt.delete_plan(sql_hash, plan_hash) as result FROM apg_plan_mgmt.dba_plans WHERE last_used < (current_date - interval '31 days') AND status <> 'Rejected' ) as dba_plans ;
total_plans | failed_to_delete | successfully_deleted -------------+------------------+---------------------- 3 | 0 | 2

Pour de plus amples informations, veuillez consulter apg_plan_mgmt.delete_plan.

Pour supprimer des plans qui ne sont pas valides et dont vous pensez qu'ils le resteront, utilisez la fonction apg_plan_mgmt.validate_plans. Cette fonction vous permet de supprimer ou de désactiver des plans non valides. Pour de plus amples informations, veuillez consulter Validation des plans.

Important

Si vous ne supprimez pas les plans superflus, vous risquez de tomber à court de mémoire partagée mise de côté pour la gestion des plans de requêtes. Pour contrôler la quantité de mémoire disponible pour les plans gérés, utilisez le paramètre apg_plan_mgmt.max_plans. Définissez ce paramètre dans votre groupe de paramètres de votre base de données personnalisés, puis réinitialisez votre instance de base de données pour appliquer les modifications. Pour plus d'informations, veuillez consulter le paramètre apg_plan_mgmt.max_plans.

Validation des plans

Utilisez la fonction apg_plan_mgmt.validate_plans pour supprimer ou désactiver les plans non valides.

Des plans peuvent devenir non valides ou obsolètes en cas de suppression d'objets dont ils dépendent, tels qu'un index ou une table. Cependant, un plan peut devenir non valide de manière temporaire seulement si l'objet supprimé est recréé. Si un plan non valide est susceptible de redevenir valide plus tard, vous préférerez peut-être le désactiver ou ne rien faire plutôt que le supprimer.

Pour retrouver et supprimer tous les plans qui sont non valides et qui n'ont pas été utilisés au cours de la semaine écoulée, utilisez la fonction apg_plan_mgmt.validate_plans comme suit.

SELECT apg_plan_mgmt.validate_plans(sql_hash, plan_hash, 'delete') FROM apg_plan_mgmt.dba_plans WHERE last_used < (current_date - interval '7 days');

Pour activer ou désactiver directement un plan, utilisez la fonction apg_plan_mgmt.set_plan_enabled.