

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\$1stat\$1statements
<a name="apg-rpg-lwlockpgstat"></a>

L'événement d' LWLockattente :pg\$1stat\$1statements se produit lorsque l'extension verrouille de manière exclusive la `pg_stat_statements` 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.max` configuré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_statements` effectue une opération `garbage collection` sur le fichier `pgss_query_texts.stat` sur le disque et réécrit le fichier.

**Topics**
+ [

## Versions de moteur prises en charge
](#apg-rpg-lwlockpgstat.supported)
+ [

## Contexte
](#apg-rpg-lwlockpgstat.context)
+ [

## Causes probables de l’augmentation du nombre d’événements d’attente
](#apg-rpg-lwlockpgstat.causes)
+ [

## Actions
](#apg-rpg-lwlockpgstat.actions)

## Versions de moteur prises en charge
<a name="apg-rpg-lwlockpgstat.supported"></a>

 Ces informations sur les événements d’attente sont prises en charge pour toutes les versions de Aurora PostgreSQL. 

## Contexte
<a name="apg-rpg-lwlockpgstat.context"></a>

**Comprendre l’extension pg\$1stat\$1statements** : l’extension pg\$1stat\$1statements 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\$1stat\$1statements.

**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\$1stat\$1statements.stat
+ Utilisant le paramètre pg\$1stat\$1statements.save pour contrôler le comportement de persistance

Lorsque pg\$1stat\$1statements.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 :
+ Prend un verrou exclusif (:pg\$1stat\$1statementsLWLock) 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\$1stat\$1statements\$1info. 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
<a name="apg-rpg-lwlockpgstat.causes"></a>

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.max` est faible par rapport au nombre de requêtes uniques utilisées.

## Actions
<a name="apg-rpg-lwlockpgstat.actions"></a>

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 `pg_stat_statements` paramètres suivants pour contrôler le comportement de suivi et réduire:les instructions LWLock pg\$1stat\$1 attendent les événements.

**Topics**
+ [

### Désactivation du paramètre pg\$1stat\$1statements.track
](#apg-rpg-lwlockpgstat.actions.disabletrack)
+ [

### Augmentation de la valeur du paramètre pg\$1stat\$1statements.max
](#apg-rpg-lwlockpgstat.actions.increasemax)
+ [

### Désactivation du paramètre pg\$1stat\$1statements.track\$1utility
](#apg-rpg-lwlockpgstat.actions.disableutility)

### Désactivation du paramètre pg\$1stat\$1statements.track
<a name="apg-rpg-lwlockpgstat.actions.disabletrack"></a>

Si l'événement:pg\$1stat\$1statements LWLock wait a un impact négatif sur les performances de la base de données et qu'une solution rapide est requise 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\$1stat\$1statements.max
<a name="apg-rpg-lwlockpgstat.actions.increasemax"></a>

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\$1stat\$1statements.track\$1utility
<a name="apg-rpg-lwlockpgstat.actions.disableutility"></a>

Vous pouvez analyser la vue pg\$1stat\$1statements 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.

**Example Exemple de requêtes de point de sauvegarde uniques dans pg\$1stat\$1statements**  <a name="savepoint-queries"></a>

```
                     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                   |  6388797791882029332
```

PostgreSQL 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.
+ La transaction globale IDs (GIDs) des commandes de validation en deux phases est désormais affichée 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.