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.
Réglage de RDS pour PostgreSQL avec les insights proactifs Amazon DevOps Guru
Les insights proactifs DevOps Guru détectent les conditions sur vos instances de base de données RDS pour PostgreSQL qui peuvent provoquer des problèmes, et vous en informent avant qu'ils 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
DevOps Guru 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 performances 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.
Rubriques
Versions de moteur prises en charge
Ces données d'insight sont prises en charge pour toutes les versions de RDS pour PostgreSQL.
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 bouclage des identifiants de transactions.
Causes probables de ce problème
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
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.
Rubriques
Arrêt de la transaction
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
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 documentation PostgreSQL
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_in_transaction 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
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.
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 automatique JDBC est définie sur true dans votre application. Pensez également à utiliser des commandes
COMMITexplicites 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.