KI-generiertes Bild
02 November 2026

Wie überwacht man PostgreSQL-Verbindungen im laufenden Betrieb?

Datenbankverbindungen sind das Herzstück jeder PostgreSQL®-Umgebung. Wenn die Verbindungsanzahl unkontrolliert wächst, das Verbindungslimit erreicht wird oder einzelne Prozesse blockieren, kann das schnell zu Ausfällen führen. Wer PostgreSQL-Verbindungen überwachen möchte, braucht dafür kein externes Monitoring-Tool von Anfang an: PostgreSQL liefert die meisten notwendigen Werkzeuge direkt mit.

In dieser Anleitung erfahren Sie Schritt für Schritt, wie Sie PostgreSQL-Datenbankverbindungen im laufenden Betrieb analysieren, Verbindungslimits prüfen, blockierte Prozesse erkennen und ein automatisches Alerting einrichten. Am Ende haben Sie ein solides Fundament für ein dauerhaftes PostgreSQL-Monitoring.

Voraussetzungen für das Verbindungsmonitoring

Bevor Sie mit dem Monitoring beginnen, stellen Sie sicher, dass die grundlegenden Rahmenbedingungen stimmen. Das erspart Ihnen spätere Fehlersuche und stellt sicher, dass die abgefragten Daten vollständig und korrekt sind.

  • Zugriff auf eine PostgreSQL-Instanz (Version 12 oder neuer empfohlen)
  • Ein Datenbankbenutzer mit der Rolle pg_monitor oder Superuser-Rechten für vollständige Einsicht in pg_stat_activity
  • Zugang zur PostgreSQL-Konfigurationsdatei postgresql.conf für das Prüfen und Anpassen von Parametern
  • Optional: Ein Monitoring-Tool wie Prometheus mit dem postgres_exporter oder pgBadger für langfristige Auswertungen

Prüfen Sie außerdem, ob die Systemvariable track_activities in der postgresql.conf auf on gesetzt ist. Nur dann werden Aktivitätsdaten in pg_stat_activity vollständig erfasst. In den meisten Standardinstallationen ist das bereits der Fall.

Aktive Verbindungen mit pg_stat_activity abfragen

Der direkteste Einstieg ins PostgreSQL-Verbindungsmonitoring ist die Systemsicht pg_stat_activity. Sie zeigt alle aktuell bestehenden Verbindungen zur Datenbank, ihren Zustand, die ausgeführte Abfrage und den zugehörigen Benutzer.

  1. Verbinden Sie sich mit psql oder einem SQL-Client als Benutzer mit pg_monitor-Rolle.
  2. Führen Sie folgende Abfrage aus, um alle aktiven Verbindungen zu sehen:

SELECT pid, usename, application_name, client_addr, state, query, now() – query_start AS laufzeit FROM pg_stat_activity WHERE state IS NOT NULL ORDER BY laufzeit DESC NULLS LAST;

Das Ergebnis zeigt Ihnen für jede Verbindung die Prozess-ID, den Benutzer, den Verbindungsstatus (active, idle, idle in transaction) sowie die laufende Abfrage und deren Dauer. Verbindungen mit dem Status idle in transaction sind besonders kritisch: Sie halten Transaktionen offen, ohne aktiv zu arbeiten, und können andere Prozesse blockieren.

Verbindungslimits und Auslastung in Echtzeit prüfen

PostgreSQL begrenzt die maximale Anzahl gleichzeitiger Verbindungen über den Parameter max_connections in der postgresql.conf. Wird dieses Limit erreicht, lehnt PostgreSQL neue Verbindungen mit einer Fehlermeldung ab. Daher ist es wichtig, die aktuelle Auslastung regelmäßig zu prüfen.

  1. Zeigen Sie den konfigurierten Maximalwert an: SHOW max_connections;
  2. Ermitteln Sie die aktuell genutzten Verbindungen: SELECT count(*) FROM pg_stat_activity;
  3. Berechnen Sie die prozentuale Auslastung mit einer kombinierten Abfrage:

SELECT count(*) AS genutzt, (SELECT setting::int FROM pg_settings WHERE name = ‚max_connections‘) AS maximum, round(count(*) * 100.0 / (SELECT setting::int FROM pg_settings WHERE name = ‚max_connections‘), 2) AS auslastung_prozent FROM pg_stat_activity;

Als Faustregel gilt: Sobald die Auslastung dauerhaft über 80 Prozent liegt, sollten Sie entweder max_connections erhöhen oder einen Connection-Pooler wie PgBouncer einsetzen. Beachten Sie, dass eine Erhöhung von max_connections auch den Speicherbedarf erhöht, da PostgreSQL für jede potenzielle Verbindung Ressourcen reserviert.

Langläufer und blockierte Prozesse identifizieren

Langläufer und blockierte Prozesse sind häufige Ursachen für Performanceprobleme in PostgreSQL-Umgebungen. Mit gezielten Abfragen lassen sich diese schnell aufspüren.

Langläufer erkennen

Führen Sie folgende Abfrage aus, um Verbindungen zu finden, die länger als fünf Minuten aktiv sind:

SELECT pid, usename, state, now() – query_start AS laufzeit, query FROM pg_stat_activity WHERE state = ‚active‘ AND now() – query_start > interval ‚5 minutes‘ ORDER BY laufzeit DESC;

Blockierte Prozesse finden

Blockierungen entstehen, wenn ein Prozess auf eine Sperre wartet, die ein anderer Prozess hält. Die folgende Abfrage zeigt blockierte und blockierende Prozesse gemeinsam:

SELECT blocked.pid AS blockiert_pid, blocked.query AS blockierte_abfrage, blocking.pid AS blockierend_pid, blocking.query AS blockierende_abfrage FROM pg_stat_activity AS blocked JOIN pg_stat_activity AS blocking ON blocking.pid = ANY(pg_blocking_pids(blocked.pid)) WHERE cardinality(pg_blocking_pids(blocked.pid)) > 0;

Wenn Sie einen blockierenden Prozess identifiziert haben und dieser sich nicht von selbst auflöst, können Sie ihn mit SELECT pg_terminate_backend(pid); beenden. Gehen Sie dabei vorsichtig vor und stellen Sie sicher, dass Sie den richtigen Prozess beenden.

Automatisches Alerting für Verbindungsprobleme einrichten

Manuelle Abfragen reichen für den produktiven Betrieb nicht aus. Mit automatischem Alerting werden Sie proaktiv informiert, bevor ein Problem eskaliert.

  1. Richten Sie den postgres_exporter ein, um PostgreSQL-Metriken für Prometheus bereitzustellen. Dieser exportiert unter anderem pg_stat_activity_count nach Zustand und Datenbankname.
  2. Definieren Sie in Prometheus Alerting-Regeln, zum Beispiel für eine Verbindungsauslastung über 80 Prozent oder für Verbindungen im Zustand idle in transaction, die länger als zehn Minuten bestehen.
  3. Verbinden Sie Alertmanager mit einem Benachrichtigungskanal Ihrer Wahl, etwa E-Mail, Slack oder PagerDuty.

Alternativ lässt sich ein einfaches Alerting auch mit einem Shell-Skript und Cron realisieren, das die Verbindungsauslastung abfragt und bei Überschreitung eines Schwellenwerts eine E-Mail versendet. Für Umgebungen ohne Prometheus ist das ein pragmatischer Einstieg. Für ein umfassendes PostgreSQL-Monitoring empfiehlt sich jedoch eine vollständige Observability-Lösung.

Verbindungsmonitoring dauerhaft in den Betrieb integrieren

Mit den bisherigen Schritten haben Sie Abfragen, Grenzwerte und Alerting konfiguriert. Jetzt geht es darum, das PostgreSQL-Monitoring dauerhaft und verlässlich in Ihren Betrieb zu integrieren.

  1. Speichern Sie Ihre wichtigsten Abfragen als Views in der Datenbank, damit sie jederzeit schnell verfügbar sind.
  2. Planen Sie regelmäßige Überprüfungen der Verbindungsstatistiken, zum Beispiel wöchentlich, um Trends frühzeitig zu erkennen.
  3. Dokumentieren Sie Schwellenwerte und Eskalationsprozesse für Ihr Team, damit im Alarmfall klar ist, wer handelt.
  4. Evaluieren Sie den Einsatz eines Connection-Poolers wie PgBouncer, wenn Ihre Anwendung viele kurzlebige Verbindungen öffnet.

Ein weiterer empfehlenswerter Schritt ist die Aktivierung von log_min_duration_statement in der postgresql.conf. Damit protokolliert PostgreSQL alle Abfragen, die eine bestimmte Laufzeit überschreiten, direkt im Datenbanklog. In Kombination mit pg_stat_activity erhalten Sie so ein vollständiges Bild des Verbindungsverhaltens Ihrer Datenbank. Informieren Sie sich auch über PostgreSQL-LTS-Optionen, wenn langfristige Stabilität für Ihre Umgebung eine Rolle spielt.

Wie credativ® beim PostgreSQL-Verbindungsmonitoring unterstützt

Wer das Verbindungsmonitoring nicht manuell aufbauen und dauerhaft selbst betreiben möchte, kann auf unsere Expertise zurückgreifen. Als PostgreSQL Competence Center begleiten wir Unternehmen durch den gesamten PostgreSQL-Lebenszyklus, von der initialen Konfiguration bis zum laufenden Betrieb.

  • Maßgeschneiderte Monitoring-Umgebungen: Wir richten für Sie ein vollständiges Monitoring auf Basis Ihrer bestehenden Infrastruktur ein, inklusive Alerting und Dashboards.
  • Proaktives Verbindungsmanagement: Wir analysieren Verbindungsmuster, identifizieren Engpässe und empfehlen geeignete Maßnahmen wie den Einsatz von PgBouncer oder die Anpassung von Konfigurationsparametern.
  • 24/7 PostgreSQL Support: Bei kritischen Verbindungsproblemen im Produktivbetrieb steht Ihnen unser Team rund um die Uhr zur Verfügung, direkt und ohne Callcenter.
  • Workshops und Schulungen: Wir vermitteln Ihrem Team das notwendige Know-how, um PostgreSQL-Datenbankverbindungen eigenständig zu überwachen und zu optimieren.

Möchten Sie Ihr PostgreSQL-Monitoring auf ein solides Fundament stellen? Kontaktieren Sie uns und wir besprechen gemeinsam, wie wir Sie am besten unterstützen können.

PostgreSQL® ist eine Marke der PostgreSQL Community Association of Canada. credativ® ist Competence Center für PostgreSQL®. Die Nennung dient ausschließlich der sachlichen Beschreibung von Dienstleistungen von credativ®.

Ähnliche Artikel

Kategorien: credativ® Inside

über den Autor

Peter Dreuw

Head of Sales & Marketing

zur Person

Peter Dreuw arbeitet seit 2016 für die credativ GmbH und ist seit 2017 Teamleiter. Seit 2021 ist er Teil des Management-Teams als VP Services der Instaclustr. Mit der Übernahme durch die NetApp wurde seine neue Rolle "Senior Manager Open Source Professional Services". Im Rahmen der Ausgründung wurde er Mitglied der Geschäftsleitung als Prokurist. Sein Aufgabenfeld ist die Leitung des Vertriebs und des Marketings. Er ist Linux-Nutzer der ersten Stunden und betreibt Linux-Systeme seit Kernel 0.97. Trotz umfangreicher Erfahrung im operativen Bereich ist er leidenschaftlicher Softwareentwickler und kennt sich auch mit hardwarenahen Systemen gut aus.

Beiträge ansehen


Beitrag teilen: