Risposte:
Questi due requisiti non sono equivalenti. La versione equivalente della prima sarebbe:
SELECT sum(numbackends) FROM pg_stat_database;
In tal caso, mi aspetto che quella versione sia leggermente più veloce della seconda, semplicemente perché ha meno righe da contare. Ma probabilmente non sarai in grado di misurare una differenza.
Entrambe le query si basano esattamente sugli stessi dati, quindi saranno ugualmente accurate.
La seguente query è molto utile
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;
Possono sicuramente dare risultati diversi. Il migliore è
select count(*) from pg_stat_activity;
È perché include connessioni ai processi del mittente WAL che vengono trattate come connessioni regolari e ai quali contano max_connections
.
Vedi max_wal_senders
Il numero di connessioni TCP ti aiuterà. Ricorda che non è per un determinato database
netstat -a -n | find /c "127.0.0.1:13306"
Osservando il codice sorgente, sembra che la query pg_stat_database ti dia il numero di connessioni al database corrente per tutti gli utenti. D'altra parte, la query pg_stat_activity fornisce il numero di connessioni al database corrente solo per l'utente che esegue la query.