Comment tuer les connexions inactives dans PostgreSQL

Comment tuer les connexions inactives dans PostgreSQL

La première étape pour apporter des modifications ou lire certaines informations d'une banque de données postgresql consiste à établir des connexions. D'un autre côté, chaque lien a généré des frais généraux en utilisant la procédure et le stockage. C'est pourquoi un appareil avec un minimum de ressources (lecture, stockage, matériel) peut prendre en charge l'agrégat limité des connexions. Une fois l'agrégat limité. Dans PostgreSQL.Conf, Postgresql fait un travail décent de limitation des liens. Dans ce tutoriel, nous examinerons les différentes formes d'états que les liens postgresql peuvent avoir. Nous vous montrerons comment déterminer si le lien est actif ou est inactif pendant une longue durée, dans lequel il peut être déconnecté pour libérer les liens et les ressources.

Connecter au serveur:

Au début, assurez-vous que PGADMIN4 a été entièrement installé sur votre système informatique. Ouvrez-le depuis vos applications. Vous devez le connecter avec le localhost en fournissant un mot de passe.

Après la connectivité avec root localhost, connectez-le avec le serveur PostgreSQL. Tapez le mot de passe du Postgres de l'utilisateur de PostgreSQL 13 pour se connecter. Appuyez sur le bouton OK pour continuer.

Vous avez maintenant été connecté au serveur PostgreSQL 13. Vous pouvez voir une liste des bases de données résidant dans le serveur comme présenté dans l'image annexée ci-dessous. La base de données de Postgres est la base de données par défaut «créée au moment de l'installation de PostgreSQL, tandis que la base de données« Test »a été créée par un utilisateur après l'installation.

Connexion indique:

Si un lien postgresql est établi, il peut effectuer diverses actions qui entraînent des transitions d'état. Une décision rationnelle doit être prise de savoir si le lien fonctionne ou qu'il a été laissé inactif / inutilisé en fonction de l'État et de la durée qu'elle a été dans chaque État. Il est important de noter que jusqu'à ce que l'application ferme délibérément la connexion, elle continuera de fonctionner, gaspillant les ressources longtemps après le détachement du client. Il y a les 4 états potentiels pour une connexion:

  • Actif: Cela signifie que le lien est opérationnel.
  • Inactif: Cela signifie que le lien est inactif, nous devons donc en garder une trace en fonction de la durée de l'inactivité.
  • Inactif (en transaction): Cela signifie que le backend est engagé dans une requête, bien qu'il soit en fait inactif et peut-être s'attendre à des commentaires du client final.
  • Inactif dans la transaction (abandonné): Cette condition est équivalente au ralenti. Cependant, l'une des déclarations a abouti à une erreur. Il peut être suivi en fonction de la durée de l'inactivité.

Identifier les états de connexion:

Les tables de catalogue PostgreSQL fournissent une vue intégrée «PG_STAT_ACTIVITY» pour vérifier les statistiques de ce que fait un lien ou de la quantité de temps dans cette condition. Pour vérifier toutes les statistiques concernant chaque base de données et chaque état de connexion, ouvrez l'outil de requête et exécutez la requête ci-dessous:

>> SELECT * FROM PG_STAT_ACTIVITY;

La requête a été mise en œuvre fructueuse et la note de réalisation a été montrée.

Lorsque vous vérifiez son côté de sortie de données, vous trouverez un tableau avec plusieurs colonnes, comme indiqué ci-dessous. Vous pouvez vérifier les états des connexions en vérifiant les valeurs du champ «État».

Pour simplifier la sortie et avoir une idée claire des connexions, de leurs états, des utilisateurs et des serveurs sur ces états, vous devez exécuter la requête ci-dessous dans l'outil de requête. Cette requête affiche uniquement les 5 champs d'enregistrements pour les connexions et les données particulières les concernant. La colonne «PID» signifie ID de processus. La colonne «État» détient les états des processus. La colonne «usename» identifie l'utilisateur qui a travaillé sur le processus particulier. La colonne «Datname» a spécifié le nom de la base de données sur laquelle la transaction a exécuté. La colonne «DATID» signifie ID de base de données.

>> sélectionnez PID, état, usename datname, datid, à partir de pg_stat_activité;

La sortie a un total de 8 processus enregistrés. La colonne «État» montre qu'il n'y a que 3 processus qui fonctionnent maintenant. L'un est détenu par défaut de la base de données «Postgres et les deux autres sont détenus par la base de données« test ». En même temps, l'utilisateur de Postgres a effectué ces processus.

Identifiez les connexions inactives:

«L'état» semble être la seule valeur que nous recherchons dans les résultats mentionnés ci-dessus. Nous utiliserons ces informations pour déterminer quels processus ou requêtes sont dans quels états et ensuite creuser. Nous pouvons diminuer les détails que nous recherchons en affinant la requête, nous permettant de préparer une intervention sur cette connexion spécifique. Nous pourrions le faire en choisissant uniquement les Pids inactifs en utilisant la clause Where et les États pour ces PIDS. Nous devons également garder une trace de la durée du lien et de nous assurer que nous n'avons pas de liens négligés gaspillant nos ressources. En conséquence, nous utiliserons la commande ci-dessous pour afficher uniquement les enregistrements pertinents pour les processus actuellement inactifs:

>> sélectionnez PID, USENAME, USETYSID, DATID, DATNAME, Application_name, Backend_Start, State_Change, State de PG_STAT_ACTIVITY WHERE STATE = 'IDLE';

La requête n'a récupéré que 2 enregistrements de données où l'état était «inactif» en utilisant la clause WHERE. Le résultat montre les 2 processus inactifs avec certaines informations les concernant.

Tuez une connexion inactive:

Après l'identification des connexions inactives, maintenant un moment pour les tuer. Une fois que nous avons réduit le processus en un état de main. Nous devons fournir le processus «ID» dans la requête dans une fonction de terminaison.

>> sélectionnez pg_terminate_backend (7408);

Le processus a été magnifiquement tué.

Vérifiez maintenant les connexions inactives restantes de la requête ci-dessous.

>> sélectionnez datid, usename, datname, pid, état de pg_stat_activité où state = 'idle';

La sortie ne montre qu'un seul processus restant, qui est inactif.

Conclusion:

Assurez-vous de ne manquer aucune étape pour tuer efficacement les connexions inactives de la base de données PostgreSQL.