Które z poniższych dwóch jest bardziej dokładne?Prawą kwerendę, aby uzyskać aktualną liczbę połączeń w PostgreSQL DB
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Które z poniższych dwóch jest bardziej dokładne?Prawą kwerendę, aby uzyskać aktualną liczbę połączeń w PostgreSQL DB
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Te dwa wymagania nie są równoważne. Równowartość wersja pierwszego byłoby:
SELECT sum(numbackends) FROM pg_stat_database;
W takim przypadku należałoby się spodziewać, że wersja będzie nieco szybciej niż drugi, po prostu dlatego, że ma mniej wierszy liczyć. Ale prawdopodobnie nie będziesz w stanie zmierzyć różnicy.
Oba zapytania są oparte na dokładnie tych samych danych, więc będą równie dokładne.
Od patrząc na kod źródłowy, wydaje się, że zapytanie pg_stat_database daje liczbę połączeń do aktualnej bazy danych dla wszystkich użytkowników. Z drugiej strony, zapytanie pg_stat_activity podaje liczbę połączeń z bieżącą bazą danych tylko dla użytkownika zapytującego.
To nieprawda. pg_stat_activity daje również wszystkie połączenia, niezależnie od użytkownika. Następnie daje pole, które mówi, który to jest użytkownik, że możesz filtrować, jeśli chcesz. Nie dostarczysz * tekstu zapytania *, jeśli nie jesteś tym samym użytkownikiem lub superużytkownikiem, ale nadal będzie on wyświetlał połączenie. –
Masz rację. Nie patrzyłem wystarczająco dokładnie na definicję widoku. Ograniczenie userid dotyczy tylko sprzężenia przed pg_authid. Mój błąd. –
Pomoże Ci w tym wiele połączeń TCP. Pamiętaj, że nie jest to dla konkretnej bazy danych:
netstat -a -n | find/c "127.0.0.1:13306"
Lepszy pod względem tego, co? –
Lepsza pod względem dokładności –