¿Cuál de los siguientes dos es más preciso?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
¿Cuál de los siguientes dos es más preciso?
select numbackends from pg_stat_database;
select count(*) from pg_stat_activity;
Respuestas:
Esos dos requisitos no son equivalentes. La versión equivalente de la primera sería:
SELECT sum(numbackends) FROM pg_stat_database;
En ese caso, esperaría que esa versión sea un poco más rápida que la segunda, simplemente porque tiene menos filas para contar. Pero no es probable que pueda medir la diferencia.
Ambas consultas se basan exactamente en los mismos datos, por lo que serán igualmente precisas.
La siguiente consulta es muy útil.
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;
Definitivamente pueden dar resultados diferentes. El mejor es
select count(*) from pg_stat_activity;
Es porque incluye conexiones a los procesos del remitente WAL que se tratan como conexiones regulares y cuentan para max_connections
.
Ver max_wal_senders
El número de conexiones TCP te ayudará. Recuerde que no es para una base de datos particular
netstat -a -n | find /c "127.0.0.1:13306"
Al mirar el código fuente, parece que la consulta pg_stat_database le brinda la cantidad de conexiones a la base de datos actual para todos los usuarios. Por otro lado, la consulta pg_stat_activity proporciona el número de conexiones a la base de datos actual solo para el usuario que realiza la consulta.