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.
LWLock:pg_stat_statements
L’événement d’attente LWLock:pg_stat_statements se produit lorsque l’extension pg_stat_statements verrouille de manière exclusive la table de hachage qui suit les instructions SQL. Cela se produit dans les scénarios suivants :
-
Lorsque le nombre d’instructions suivies atteint la valeur de paramètre
pg_stat_statements.maxconfigurée et qu’il est nécessaire de faire de la place à d’autres entrées, l’extension effectue un tri sur le nombre d’appels, supprime les 5 % des instructions les moins exécutées et remplit à nouveau le hachage avec les entrées restantes. -
Lorsque
pg_stat_statementseffectue une opérationgarbage collectionsur le fichierpgss_query_texts.statsur le disque et réécrit le fichier.
Rubriques
Versions de moteur prises en charge
Ces informations sur les événements d’attente sont prises en charge pour toutes les versions de RDS pour PostgreSQL.
Contexte
Comprendre l’extension pg_stat_statements : l’extension pg_stat_statements suit les statistiques d’exécution des instructions SQL dans une table de hachage. L’extension suit les instructions SQL jusqu’à la limite définie par le paramètre pg_stat_statements.max. Ce paramètre détermine le nombre maximum d’instructions pouvant être suivies, ce qui correspond au nombre maximum de lignes dans la vue pg_stat_statements.
Persistance des statistiques des instructions : l’extension conserve les statistiques des instructions lors des redémarrages de l’instance en :
-
Écrivant des données dans un fichier nommé pg_stat_statements.stat
-
Utilisant le paramètre pg_stat_statements.save pour contrôler le comportement de persistance
Lorsque pg_stat_statements.save est :
-
activé (par défaut) : les statistiques sont enregistrées à l’arrêt et rechargées au démarrage du serveur
-
désactivé : les statistiques ne sont ni enregistrées à l’arrêt, ni rechargées au démarrage du serveur
Stockage du texte des requêtes : l’extension stocke le texte des requêtes suivies dans un fichier nommé pgss_query_texts.stat. Ce fichier peut atteindre le double de la taille moyenne de toutes les instructions SQL suivies avant le récupérateur de mémoire. L’extension nécessite un verrouillage exclusif de la table de hachage pendant les opérations de nettoyage et de réécriture du fichier pgss_query_texts.stat.
Processus d’annulation de l’allocation des instructions : lorsque le nombre d’instructions suivies atteint la limite pg_stat_statements.max et que de nouvelles instructions doivent être suivies, l’extension :
-
Utilise un verrou exclusif (LWLock:pg_stat_statements) sur la table de hachage.
-
Charge les données existantes dans la mémoire locale.
-
Effectue un tri rapide en fonction du nombre d’appels.
-
Supprime les instructions les moins appelées (les 5 % inférieures).
-
Reremplit la table de hachage avec les entrées restantes.
Surveillance de l’annulation de l’allocation des instructions : dans PostgreSQL 14 et versions ultérieures, vous pouvez surveiller l’annulation de l’allocation des instructions à l’aide de la vue pg_stat_statements_info. Cette vue inclut une colonne dealloc qui indique le nombre de fois où l’allocation des instructions a été annulée pour faire de la place à de nouvelles.
Si l’annulation de l’allocation des instructions se produit fréquemment, cela accroît la fréquence du récupérateur de mémoire au niveau du fichier pgss_query_texts.stat sur le disque.
Causes probables de l’augmentation du nombre d’événements d’attente
Les causes typiques de l’allongement des temps d’attente de LWLock:pg_stat_statements sont les suivantes :
-
Augmentation du nombre de requêtes uniques utilisées par l’application.
-
La valeur du paramètre
pg_stat_statements.maxest faible par rapport au nombre de requêtes uniques utilisées.
Actions
Nous vous recommandons différentes actions en fonction des causes de votre événement d’attente. Vous pouvez identifier les événements LWLock:pg_stat_statements en utilisant Analyse des performances d’Amazon RDS ou en interrogeant la vue pg_stat_activity.
Ajustez les paramètres pg_stat_statements suivants pour contrôler le comportement de suivi et réduire les événements d’attente liés aux instructions LWLock:pg_stat_.
Rubriques
Désactivation du paramètre pg_stat_statements.track
Si l’événement d’attente LWLock:pg_stat_statements a un impact négatif sur les performances de la base de données et qu’une solution rapide est nécessaire avant de poursuivre l’analyse de la vue pg_stat_statements afin d’identifier la cause première, le paramètre pg_stat_statements.track peut être désactivé en le définissant sur none. Cela désactive la collecte des statistiques des instructions.
Augmentation de la valeur du paramètre pg_stat_statements.max
Pour réduire les annulations d’allocation d’instructions et minimiser le récupérateur de mémoire du fichier pgss_query_texts.stat sur le disque, augmentez la valeur du paramètre pg_stat_statements.max. La valeur par défaut est 5,000.
Note
Le paramètre pg_stat_statements.max est statique. Vous devez redémarrer votre instance de base de données pour appliquer les éventuelles modifications apportées à ce paramètre.
Désactivation du paramètre pg_stat_statements.track_utility
Vous pouvez analyser la vue pg_stat_statements pour déterminer les commandes utilitaires consommant le plus de ressources suivies par pg_stat_statements.
Le paramètre pg_stat_statements.track_utility contrôle si le module suit les commandes utilitaires, qui incluent toutes les commandes sauf SELECT, INSERT, UPDATE, DELETE et MERGE. Par défaut, ce paramètre est défini sur on.
Par exemple, lorsque votre application utilise de nombreuses requêtes de point de sauvegarde, qui sont intrinsèquement uniques, cela peut augmenter l’annulation de l’allocation des instructions. Pour résoudre ce problème, vous pouvez désactiver le paramètre pg_stat_statements.track_utility pour empêcher pg_stat_statements de suivre les requêtes de point de sauvegarde.
Note
Le paramètre pg_stat_statements.track_utility est un paramètre dynamique. Vous pouvez modifier sa valeur sans redémarrer votre instance de base de données.
Exemple de requêtes de point de sauvegarde uniques dans pg_stat_statements
query | queryid
-------------------------------------------------+---------------------
SAVEPOINT JDBC_SAVEPOINT_495701 | -7249565344517699703
SAVEPOINT JDBC_SAVEPOINT_1320 | -1572997038849006629
SAVEPOINT JDBC_SAVEPOINT_26739 | 54791337410474486
SAVEPOINT JDBC_SAVEPOINT_1294466 | 8170064357463507593
ROLLBACK TO SAVEPOINT JDBC_SAVEPOINT_65016 | -33608214779996400
SAVEPOINT JDBC_SAVEPOINT_14185 | -2175035613806809562
SAVEPOINT JDBC_SAVEPOINT_45837 | -6201592986750645383
SAVEPOINT JDBC_SAVEPOINT_1324 | 6388797791882029332PostgreSQL 17 inclut plusieurs améliorations pour le suivi des commandes utilitaires :
-
Les noms des points de sauvegarde sont désormais affichés sous forme de constantes.
-
Les identifiants de transaction globaux (GID) des commandes de validation en deux phases sont désormais affichés sous forme de constantes.
-
Les noms des instructions DEALLOCATE sont affichés sous forme de constantes.
-
Les paramètres CALL sont désormais affichés sous forme de constantes.