Odpowiedzi:
Te dwa wymagania nie są równoważne. Równoważna wersja pierwszego byłaby:
SELECT sum(numbackends) FROM pg_stat_database;
W takim przypadku spodziewałbym się, że ta wersja będzie nieco szybsza niż druga, po prostu dlatego, że ma mniej wierszy do policzenia. Ale prawdopodobnie nie będziesz w stanie zmierzyć różnicy.
Oba zapytania opierają się na dokładnie tych samych danych, więc będą równie dokładne.
Poniższe zapytanie jest bardzo pomocne
select * from
(select count(*) used from pg_stat_activity) q1,
(select setting::int res_for_super from pg_settings where name=$$superuser_reserved_connections$$) q2,
(select setting::int max_conn from pg_settings where name=$$max_connections$$) q3;
Zdecydowanie mogą dać inne rezultaty. Lepszy jest
select count(*) from pg_stat_activity;
Dzieje się tak, ponieważ zawiera połączenia z procesami nadawcy WAL, które są traktowane jako zwykłe połączenia i liczą się do max_connections
.
Zobacz max_wal_senders
Liczba połączeń TCP pomoże Ci. Pamiętaj, że nie dotyczy to konkretnej bazy danych
netstat -a -n | find /c "127.0.0.1:13306"
Patrząc na kod źródłowy, wygląda na to, że zapytanie pg_stat_database podaje liczbę połączeń z bieżącą bazą danych dla wszystkich użytkowników. Z drugiej strony zapytanie pg_stat_activity podaje liczbę połączeń do bieżącej bazy danych tylko dla odpytującego użytkownika.