| Kategorien: | credativ® Inside |
|---|
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.
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.
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.
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.
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.
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.
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 sind häufige Ursachen für Performanceprobleme in PostgreSQL-Umgebungen. Mit gezielten Abfragen lassen sich diese schnell aufspüren.
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;
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.
Manuelle Abfragen reichen für den produktiven Betrieb nicht aus. Mit automatischem Alerting werden Sie proaktiv informiert, bevor ein Problem eskaliert.
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.
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.
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.
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.
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®.
| Kategorien: | credativ® Inside |
|---|
über den Autor
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.
Sie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Brevo. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr InformationenSie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie müssen den Inhalt von Turnstile laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie müssen den Inhalt von reCAPTCHA laden, um das Formular abzuschicken. Bitte beachten Sie, dass dabei Daten mit Drittanbietern ausgetauscht werden.
Mehr InformationenSie sehen gerade einen Platzhalterinhalt von Turnstile. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen