

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.

# Optimisation de grâce aux informations proactives d'Amazon Guru DevOps
<a name="PostgreSQL.Tuning_proactive_insights"></a>

DevOpsGuru Proactive Insights détecte les conditions sur vos (clusters de bases de données Aurora PostgreSQL) susceptibles de provoquer des problèmes, et vous en informe avant qu'ils ne surviennent. Des insights proactifs peuvent vous alerter lorsqu’une connexion reste inactive pendant une transaction de longue durée. Pour plus d’informations sur la résolution des problèmes liés aux connexions restées inactives trop longtemps pendant une transaction, consultez [La base de données a une connexion de longue durée à l’état Transaction inactive](#proactive-insights.idle-txn)

DevOpsGuru peut effectuer les opérations suivantes :
+ Éviter de nombreux problèmes courants liés aux bases de données en recoupant la configuration de votre base de données par rapport aux paramètres courants recommandés.
+ Vous alerter face à des problèmes critiques dans votre flotte qui, s’ils ne sont pas vérifiés, peuvent entraîner des problèmes plus importants ultérieurement.
+ Vous alerter face à des problèmes nouvellement découverts.

Chaque insight proactif contient une analyse de la cause du problème et des recommandations d’actions correctives.

Pour plus d'informations sur Amazon DevOps Guru pour Amazon RDS, consultez[Analyse des anomalies de performance d'Aurora avec Amazon DevOps Guru pour Amazon RDS](devops-guru-for-rds.md).

## La base de données a une connexion de longue durée à l’état Transaction inactive
<a name="proactive-insights.idle-txn"></a>

Une connexion à la base de données est à l’état `idle in transaction` depuis plus de 1 800 secondes.

**Topics**
+ [Versions de moteur prises en charge](#proactive-insights.idle-txn.context.supported)
+ [Contexte](#proactive-insights.idle-txn.context)
+ [Causes probables de ce problème](#proactive-insights.idle-txn.causes)
+ [Actions](#proactive-insights.idle-txn.actions)
+ [Métriques pertinentes](#proactive-insights.idle-txn.metrics)

### Versions de moteur prises en charge
<a name="proactive-insights.idle-txn.context.supported"></a>

Ces données d’insight sont prises en charge pour toutes les versions d’Aurora PostgreSQL.

### Contexte
<a name="proactive-insights.idle-txn.context"></a>

Une transaction à l’état `idle in transaction` peut contenir des verrous qui bloquent d’autres requêtes. Elle peut également empêcher `VACUUM` (y compris autovacuum) de nettoyer les lignes inactives, ce qui entraînerait le gonflement des index ou des tables ou le bouclage des identifiants de transactions.

### Causes probables de ce problème
<a name="proactive-insights.idle-txn.causes"></a>

Une transaction initiée dans une session interactive avec BEGIN ou START TRANSACTION ne s’est pas terminée à l’aide d’une commande COMMIT, ROLLBACK ou END. Cela entraîne le passage de la transaction à l’état `idle in transaction`.

### Actions
<a name="proactive-insights.idle-txn.actions"></a>

Vous pouvez trouver les transactions inactives en exécutant la requête `pg_stat_activity`.

Dans votre client SQL, exécutez la requête suivante pour répertorier toutes les connexions à l’état `idle in transaction` et les ordonner par durée :

```
SELECT now() - state_change as idle_in_transaction_duration, now() - xact_start as xact_duration,* 
FROM  pg_stat_activity 
WHERE state  = 'idle in transaction'
AND   xact_start is not null
ORDER BY 1 DESC;
```

Nous vous recommandons différentes actions en fonction des causes de votre insight.

**Topics**
+ [Arrêt de la transaction](#proactive-insights.idle-txn.actions.end-txn)
+ [Interruption de la connexion](#proactive-insights.idle-txn.actions.end-connection)
+ [Configuration du paramètre idle\$1in\$1transaction\$1session\$1timeout](#proactive-insights.idle-txn.actions.parameter)
+ [Vérification du statut AUTOCOMMIT](#proactive-insights.idle-txn.actions.autocommit)
+ [Vérification de la logique de transaction dans le code de votre application](#proactive-insights.idle-txn.actions.app-logic)

#### Arrêt de la transaction
<a name="proactive-insights.idle-txn.actions.end-txn"></a>

Lorsque vous lancez une transaction dans une session interactive avec BEGIN ou START TRANSACTION, elle passe à l’état `idle in transaction`. Elle reste dans cet état jusqu’à ce que vous terminiez la transaction en émettant une commande COMMIT, ROLLBACK ou END, ou que vous déconnectiez complètement la connexion pour annuler la transaction.

#### Interruption de la connexion
<a name="proactive-insights.idle-txn.actions.end-connection"></a>

Mettez fin à la connexion avec une transaction inactive à l’aide de la requête suivante :

```
SELECT pg_terminate_backend(pid);
```

pid est l’ID de processus de la connexion.

#### Configuration du paramètre idle\$1in\$1transaction\$1session\$1timeout
<a name="proactive-insights.idle-txn.actions.parameter"></a>

Définissez le paramètre `idle_in_transaction_session_timeout` dans le nouveau groupe de paramètres. La configuration de ce paramètre présente l’avantage de ne pas nécessiter d’intervention manuelle pour mettre fin à la longue période d’inactivité de la transaction. Pour plus d’informations sur ce paramètre, consultez [la documentation PostgreSQL](https://www.postgresql.org/docs/current/runtime-config-client.html). 

Le message suivant sera enregistré dans le fichier journal de PostgreSQL après l’interruption de la connexion, quand une transaction sera dans l’état idle\$1in\$1transaction pendant un temps supérieur à la durée spécifiée.

```
FATAL: terminating connection due to idle in transaction timeout
```

#### Vérification du statut AUTOCOMMIT
<a name="proactive-insights.idle-txn.actions.autocommit"></a>

AUTOCOMMIT est activé par défaut. Mais s’il est désactivé accidentellement dans le client, veillez à le réactiver.
+ Dans votre client psql, exécutez la commande suivante :

  ```
  postgres=> \set AUTOCOMMIT on
  ```
+ Dans pgadmin, activez-la en choisissant l’option AUTOCOMMIT à partir de la flèche déroulante.  
![\[Dans pgadmin, choisissez AUTOCOMMIT pour l’activer.\]](http://docs.aws.amazon.com/fr_fr/AmazonRDS/latest/AuroraUserGuide/images/apg-insight-pgadmin-autocommit.png)

#### Vérification de la logique de transaction dans le code de votre application
<a name="proactive-insights.idle-txn.actions.app-logic"></a>

Examinez la logique de votre application pour détecter d’éventuels problèmes. Procédez comme suit :
+ Vérifiez si la validation automatique JDBC est définie sur true dans votre application. Pensez également à utiliser des commandes `COMMIT` explicites dans votre code.
+ Vérifiez votre logique de gestion des erreurs pour voir si elle clôture une transaction après des erreurs.
+ Vérifiez si votre application met du temps à traiter les lignes renvoyées par une requête lorsque la transaction est ouverte. Si tel est le cas, pensez à coder l’application pour clôturer la transaction avant de traiter les lignes.
+ Vérifiez si une transaction contient de nombreuses opérations de longue durée. Si tel est le cas, divisez une transaction individuelle en plusieurs transactions.

### Métriques pertinentes
<a name="proactive-insights.idle-txn.metrics"></a>

Les métriques PI suivantes sont liées à cet insight :
+ idle\$1in\$1transaction\$1count : nombre de sessions à l’état `idle in transaction`.
+ idle\$1in\$1transaction\$1max\$1time : durée de la transaction la plus longue à l’état `idle in transaction`.