Próbowałem użyć skryptu Nagios do monitorowania liczby połączeń z bazą danych w bazie danych Postgres i doszedłem do tego problemu: są one liczone jako aktualnie otwarte połączenia i mierzone co 5 minut.
SELECT sum(numbackends) FROM pg_stat_database;
Mimo to wydaje się, że brakuje dużej liczby krótkotrwałych połączeń, więc statystyki są dalekie od rzeczywistości.
Próbowałem uruchomić skrypt ręcznie i zauważyłem duże zmiany nawet między dwoma połączeniami oddalonymi od siebie o kilka sekund.
Jak mogę uzyskać te informacje w niezawodny sposób? jak max (connectios) wydarzyło się w pewnym przedziale czasu.
PgBouncer
przed instancją PostgreSQL, która będzie kolejkować połączenia, gdy będzie zbyt zajęta, zamiast je odrzucać. (Tak, to głupie, że PostgreSQL nie może tego zrobić samodzielnie, ale nie jest to prosta poprawka; zobacz niekończące się dyskusje na listach dyskusyjnych dotyczące wbudowanej puli).log_connections
ilog_disconnections
) do pliku dziennika (np. Csvlog), a następnie użyj pgBadger lub czegoś podobnego, aby wyodrębnić to z pliku dziennika?Odpowiedzi:
Lepiej jest używać narzędzi do monitorowania obciążenia, takich jak
pgbadger
sprawdzanie połączeń z bazą danych i ogólne obciążenie. Pomoże ci zrozumieć, którzy użytkownicy łączą się przez ile czasu i jakie zapytania są przez nich uruchamiane. Aby uzyskać informacje na temat instalowania i konfigurowania pgbadger, zobacz tę stronę.Jeśli chcesz tylko sprawdzić liczbę aktywnych połączeń, możesz użyć
select count(*) from pg_stat_activity where state='active'
źródło
Aby to zrobić, możesz użyć rozszerzenia z local_preload_libraries.
Coś takiego:
Lub zamiast tego UPDATE przez NOTIFY
źródło