Lequel des deux suivants est le plus précis?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Lequel des deux suivants est le plus précis?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Réponses:
Ces deux exigences ne sont pas équivalentes. La version équivalente de la première 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 a moins de lignes à compter. Mais vous ne serez probablement pas en mesure de mesurer une différence.
Les deux requêtes sont basées exactement sur les mêmes données, elles seront donc tout 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 d'expéditeur WAL qui sont traitées comme des connexions régulières et comptabilisées max_connections
.
Voir max_wal_senders
Le nombre de connexions TCP vous aidera. 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"
En regardant le code source, il semble que la requête pg_stat_database vous donne le nombre de connexions à la base de données actuelle pour tous les utilisateurs. D'autre part, la requête pg_stat_activity donne le nombre de connexions à la base de données courante pour l'utilisateur qui interroge uniquement.