Lequel des deux suivants est plus précis?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Ces deux exigences ne sont pas équivalentes. La version équivalente du premier serait:
SELECT sum(numbackends) FROM pg_stat_database;
Dans ce cas, je m'attendrais à ce que cette version soit légèrement plus rapide que la seconde, simplement parce qu'elle compte moins de lignes à compter. Mais vous ne pourrez probablement pas mesurer une différence.
Les deux requêtes sont basées sur les mêmes données, elles seront donc aussi précises.
La requête suivante est très 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;
Ils peuvent certainement donner des résultats différents. Le meilleur est
select count(*) from pg_stat_activity;
C’est parce qu’il inclut des connexions aux processus émetteurs WAL qui sont traités comme des connexions régulières et comptent pour max_connections
.
Voir max_wal_senders
Nombre de TCP connexions vous aideront. N'oubliez pas que ce n'est pas pour une base de données particulière
netstat -a -n | find /c "127.0.0.1:13306"