So töten Sie Leerlaufverbindungen in Postgresql

So töten Sie Leerlaufverbindungen in Postgresql

Der erste Schritt, um Änderungen vorzunehmen oder einige Informationen aus einer PostgreSQL -Datenbank zu lesen, besteht darin, Verbindungen herzustellen. Andererseits erzeugte jede Verbindung, die Overhead mit Verfahren und Speicher verwendet hat. Aus diesem Grund kann ein Gerät mit minimalen Ressourcen (Lesen, Speicher, Hardware) das begrenzte Zusammenhang von Verbindungen unterstützen. Sobald das begrenzte Aggregat weit über einen Punkt hinausgegangen ist, sollte es weiterhin Fehler schleudern oder Verbindungen verweigern. Innerhalb postgresql.conf, postgresql leistet eine anständige Aufgabe, Links zu begrenzen. In diesem Tutorial werden wir uns die verschiedenen Formen von Staaten ansehen, die PostgreSQL -Links haben können. Wir zeigen Ihnen, wie Sie feststellen können, ob der Link aktiv ist oder für eine lange Dauer inaktiv ist, wobei der Fall, dass er die Links und Ressourcen befreien kann, getrennt werden kann.

Verbinden zum Server:

Stellen Sie zu Beginn sicher, dass Pgadmin4 auf Ihrem Computersystem voll funktionsfähig installiert wurde. Öffnen Sie es aus Ihren Anwendungen. Sie müssen es mit dem Localhost verbinden, indem Sie ein Passwort angeben.

Schließen Sie sie nach der Konnektivität mit Root Localhost mit dem PostgreSQL -Server an. Geben Sie das Passwort ein, damit die Postgres postgreSQL 13 Benutzer herstellen können. Tippen Sie auf die Schaltfläche OK, um fortzufahren.

Jetzt wurden Sie mit dem PostgreSQL 13 -Server verbunden. Sie können eine Liste von Datenbanken sehen, die sich im Server befinden. Die Datenbank von Postgres ist die Standarddatenbank "Erstellt zum Zeitpunkt der PostgreSQL -Installation, während die Datenbank" Test "von einem Benutzer anschließend in der Installation erstellt wurde.

Verbindungszustände:

Wenn ein PostgreSQL -Link festgelegt wird, kann er verschiedene Maßnahmen ausführen, die zu Zustandsübergängen führen. Es sollte eine rationale Entscheidung getroffen werden. Es ist wichtig zu beachten, dass die Anwendung die Verbindung absichtlich abschließt, sondern auch die Ressourcen verschwenden wird, lange nachdem der Kunde abgelöst wurde. Es gibt die 4 potenziellen Zustände für eine Verbindung:

  • Aktiv: Dies bedeutet, dass der Link in Betrieb ist.
  • Leerlauf: Dies bedeutet, dass der Link inaktiv ist. Daher müssen wir eine Aufzeichnung von ihnen beibehalten, je nachdem, wie lange sie untätig waren.
  • Leerlauf (in der Transaktion): Dies bedeutet, dass das Backend in eine Abfrage beteiligt ist, obwohl er tatsächlich untätig ist und möglicherweise Eingaben vom Endkunden erwartet.
  • Leerlauf in der Transaktion (abgebrochen): Diese Bedingung entspricht dem Leerlauf im Prozess. Eine der Erklärungen gipfelte jedoch zu einem Fehler. Es kann verfolgt werden, je nachdem, wie lange es untätig war.

Identifizieren Sie die Verbindungszustände:

Die PostgreSQL-Katalogtabellen bieten eine integrierte Ansicht 'pg_stat_Activity', um die Statistiken darüber zu überprüfen, was ein Link tut oder wie viel Zeit er in diesem Zustand war. Öffnen Sie das Abfragetool und führen Sie die folgende Abfrage aus:

>> aus pg_stat_activity auswählen;

Die Abfrage wurde fruchtbar umgesetzt, und die Erfüllungsnote wurde gezeigt.

Wenn Sie die Seite der Datenausgabe überprüfen, finden Sie eine Tabelle mit mehreren Spalten, wie unten gezeigt. Sie können die Verbindungszustände überprüfen, indem Sie die Werte des Feldes "Status" überprüfen.

Um die Ausgabe zu vereinfachen und eine klare Vorstellung von Verbindungen, ihren Staaten, den Benutzern und Servern in diesen Staaten zu haben, müssen Sie die folgende Abfrage im Abfrage-Tool ausführen. Diese Abfrage zeigt nur die 5 Datensätze für Verbindungen und bestimmte Daten zu ihnen an. Die Spalte 'PID' steht für Process ID. Die Spalte "Zustand" enthält die Prozessezustände. Die Spalte 'Usename' identifiziert den Benutzer, der an dem jeweiligen Prozess gearbeitet hat. Die Spalte 'Datname' gab den Datenbanknamen an, auf dem die Transaktion ausgeführt wurde. Die Spalte 'Datid' steht für die Datenbank -ID.

>> PID, Status, usename datname, datid, aus pg_stat_Activity;

Die Ausgabe hat insgesamt 8 Prozesse aufgezeichnet. Die Spalte "Status" zeigt, dass derzeit nur 3 Prozesse funktionieren. Eine wird standardmäßig von Datenbank "Postgres" gehalten und die anderen beiden werden im Datenbank "Test" gehalten. Gleichzeitig hat der Benutzer des Postgres diese Prozesse durchgeführt.

Identifizieren Sie die Leerlaufverbindungen:

Der „Zustand“ scheint der alleinige Wert zu sein, den wir innerhalb der oben genannten Ergebnisse suchen. Wir werden diese Informationen verwenden, um festzustellen, welche Prozesse oder Abfragen in welchen Zuständen und danach tiefer graben. Wir können die Details, nach denen wir suchen. Wir könnten dies tun, indem wir nur die Leerlaufhöfe mit der Where -Klausel und den Zuständen für diese PIDs auswählen. Wir sollten auch verfolgen, wie lange der Link inaktiv war, und sicherstellen, dass wir keine vernachlässigten Links haben, die unsere Ressourcen verschwenden. Infolgedessen werden wir den Befehl am unterer rephrowniertem Befehl verwenden, um nur Datensätze anzuzeigen, die für die derzeit im Leerlauf stehenden Prozesse relevant sind:

>> pid, usename, usysid, datid, datname, application_name, backend_start, state_change, Status von pg_stat_Activity wobei State = 'idle';

Die Abfrage hat nur 2 Datensätze von Daten abgerufen. Das Ergebnis zeigt die 2 Leerlaufprozesse mit bestimmten Informationen zu ihnen.

Töte eine müßige Verbindung:

Nach der Identifizierung von Leerlaufverbindungen nun eine Zeit, um sie zu töten. Sobald wir den Prozess entweder in einem Hold-Status oder inaktiv länger niedergeschlagen haben, könnten wir den einfachen Befehl verwenden, um den Back-End-Mechanismus problemlos zu beenden, ohne die Aktivitäten des Servers zu stören. Wir müssen den Prozess 'ID' innerhalb der Abfrage in einer Terminfunktion bereitstellen.

>> Wählen Sie pg_termate_backend (7408);

Der Prozess wurde großartig getötet.

Überprüfen Sie nun die verbleibenden Leerlaufverbindungen von der folgenden beendeten Abfrage.

>> DATID, UNSENAME, DATNAME, PID, STATE AUS PG_STAT_ACTIVITY WHERE STATE = 'Idle';

Der Ausgang zeigt nur einen verbleibenden Prozess, der im Leerlauf ist.

Abschluss:

Verpassen Sie keinen Schritt, um die inaktiven Verbindungen aus der PostgreSQL -Datenbank effizient abzugeben.