web-dev-qa-db-fra.com

Requête correcte pour obtenir le nombre actuel de connexions dans une base de données PostgreSQL

Lequel des deux suivants est plus précis?

select numbackends from pg_stat_database;

select count(*) from pg_stat_activity;
114
Murali VP

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.

181
Magnus Hagander

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;
14
tbo

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

2
gargii

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"
0