Ich habe versucht, ein Nagios-Skript zum Überwachen der Anzahl der Datenbankverbindungen in einer Postgres-Datenbank zu verwenden, und bin auf dieses Problem gestoßen: Diese werden als derzeit offene Verbindungen gezählt und alle 5 Minuten gemessen.
SELECT sum(numbackends) FROM pg_stat_database;
Dennoch scheint dies eine große Anzahl von kurzlebigen Verbindungen zu übersehen, so dass die Statistiken weit von der Realität entfernt sind.
Ich habe versucht, das Skript manuell auszuführen, und ich habe große Änderungen festgestellt, selbst zwischen zwei Verbindungen, die einige Sekunden voneinander entfernt hergestellt wurden.
Wie kann ich diese Informationen zuverlässig erhalten? wie max (connectios) während eines Zeitintervalls passiert.
PgBouncer
vor Ihre PostgreSQL-Instanz zu stellen, da sie Verbindungen in die Warteschlange stellt, wenn sie zu beschäftigt ist, anstatt sie abzulehnen. (Ja, es ist dumm, dass PostgreSQL das nicht selbst tun kann, aber es ist keine einfache Lösung; siehe die endlosen Diskussionen auf den Mailinglisten, die in das Pooling integriert sind).log_connections
undlog_disconnections
) in der Protokolldatei (z. B. csvlog) und der Verwendung von pgBadger oder ähnlichem, um diese aus der Protokolldatei zu extrahieren?Antworten:
Es ist besser, Workload-Überwachungstools zu verwenden,
pgbadger
um beispielsweise Datenbankverbindungen und die Gesamtlast zu überprüfen. Es hilft Ihnen zu verstehen, welche Benutzer sich für wie viel Zeit verbinden und welche Abfragen von ihnen ausgelöst werden. Informationen zum Installieren und Konfigurieren von pgbadger finden Sie auf dieser Seite.Wenn Sie nur die Anzahl der aktiven Verbindungen überprüfen möchten, können Sie verwenden
select count(*) from pg_stat_activity where state='active'
quelle
Sie können dazu die Erweiterung mit local_preload_libraries verwenden.
Etwas wie das:
Oder stattdessen UPDATE über NOTIFY
quelle