Zu Viele Benutzer

Konfiguration des PostgreSQL Datenbankservers.
Antworten
Hanno
Benutzer
Beiträge: 72
Registriert: Do 21. Jan 2010, 15:19

Zu Viele Benutzer

Beitrag von Hanno » Mi 16. Okt 2019, 10:57

Hallo,

Ich habe seit kurzem das Problem, dass in meiner PostgreSQL Installation (Version 9.4) aus irgendeinem Grund zu viele Verbindungen geöffnet werden. Wenn ich mir die stat_activity Tabelle anschauen dann stehen dort hunderte von idle connections auf diesselbe Datenbank drin. Ich vermute diese kommen von autovacuum Prozessen, aber werden aus irgendeinem Grund nicht mehr geschlossen. Da so die Anzahl Benutzer natürlich immer höher wird steigt irgendwann die Datenbank aufgrund von zuvielen Verbindungen aus. Ich hab noch nicht herausfinden können woran das liegt. Gibt es aber irgendeine Möglichkeit untätige connections automatisch wieder freizugeben bis ich den wahren Fehler gefunden habe? Im Moment geht es immer nur indem ich den Server neustarte.

LG
Hanno

castorp
Erfahrener Benutzer
Beiträge: 1177
Registriert: Sa 27. Jun 2009, 22:24
Wohnort: Bayern

Re: Zu Viele Benutzer

Beitrag von castorp » Mi 16. Okt 2019, 11:15

Hanno hat geschrieben:
Mi 16. Okt 2019, 10:57
Ich vermute diese kommen von autovacuum Prozessen, aber werden aus irgendeinem Grund nicht mehr geschlossen.
Das kann ich mir nicht vorstellen. Aber diese müssten ja in der Spalte "backend_type" ja einen entsprechenden Hinweis haben.

Die Spalten usename, client_addr (und evtl. client_hostname, abhängig von der Konfiguration) sowie application_name sollten auch Aufschluss darüber geben was genau das für Verbindungen sind
Hanno hat geschrieben:
Mi 16. Okt 2019, 10:57
Gibt es aber irgendeine Möglichkeit untätige connections automatisch wieder freizugeben bis ich den wahren Fehler gefunden habe?
Die einzige Möglichkeit die mir einfällt wäre ein cron Job der regelmässig alte Verbindungen beendet mit z.B. so einem Statement

Code: Alles auswählen

select pg_terminate_backend(pid)
where datname = '....' -- nur für eine bestimmte Datenbank
  and backend_start < current_timestamp - interval '4 hour'  -- hier anpassen für das Alter der Verbindung
  and usename = '....' nur für diesen User
  and pid <> pg_backend_pid() -- nicht sich selber killen
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

Antworten