Optimisation RDSpour Postgre SQL Aurora Postgre d'Amazon DevOps Guru - Amazon Relational Database Service

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 RDSpour Postgre SQL Aurora Postgre d'Amazon DevOps Guru

DevOpsGuru Proactive Insights détecte les conditions sur vos instances RDS de SQL base de données Postgre ) susceptibles de provoquer des problèmes, et vous en informe avant qu'ils ne surviennent. Des informations proactives peuvent vous avertir en cas d'interruption prolongée de la connexion aux transactions. Pour plus d'informations sur la résolution des problèmes d'inactivité prolongée dans les connexions transactionnelles, voir La base de données a une connexion de longue durée à l'état Transaction inactive

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 AmazonRDS, consultezAnalyse des anomalies de performance avec Amazon DevOps Guru pour Amazon RDS.

La base de données a une connexion de longue durée à l'état Transaction inactive

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

Versions de moteur prises en charge

Ces informations d'information sont prises en charge pour toutes les versions de RDSfor Postgre SQL .

Contexte

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 renvoi à la ligne des identifiants de transactions.

Causes probables de ce problème

Une transaction initiée dans une session interactive avec BEGIN START TRANSACTION ou non terminée à l'aide d'une END commande COMMITROLLBACK, ou. Cela entraîne le passage de la transaction à l'état idle in transaction.

Actions

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

Dans votre SQL client, exécutez la requête suivante pour répertorier toutes les connexions dans leur idle in transaction état et les classer 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.

Arrêt de la transaction

Lorsque vous initiez une transaction dans une session interactive avec BEGIN ou STARTTRANSACTION, elle passe à idle in transaction l'état. Il reste dans cet état jusqu'à ce que vous mettiez fin à la transaction en émettant une END commande COMMITROLLBACK, ou que vous déconnectiez complètement la connexion pour annuler la transaction.

Interruption de la connexion

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_in_transaction_session_timeout

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 SQL documentation Postgre.

Le message suivant sera affiché dans le fichier SQL journal Postgre après la fin de la connexion, lorsqu'une transaction reste dans l'état idle_in_transaction pendant une durée supérieure à la durée spécifiée.

FATAL: terminating connection due to idle in transaction timeout
Vérifiez le AUTOCOMMIT statut

AUTOCOMMITest 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-le en choisissant l'AUTOCOMMIToption dans la flèche vers le bas.

    Dans pgadmin, choisissez AUTOCOMMIT de l'activer.
Vérification de la logique de transaction dans le code de votre application

Examinez la logique de votre application pour détecter d'éventuels problèmes. Procédez comme suit :

  • Vérifiez si la validation JDBC automatique 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

Les métriques PI suivantes sont liées à cet insight :

  • idle_in_transaction_count : nombre de sessions à l'état idle in transaction.

  • idle_in_transaction_max_time : durée de la transaction la plus longue à l'état idle in transaction.