Medir el uso de conexiones respecto a max_connections
PostgreSQLSesionesComando
-- Capacity: used slots and slots left for regular users
SELECT max_conn,
reserved,
used,
max_conn - reserved - used AS free_for_normal_users,
round(100.0 * used / max_conn, 1) AS used_pct
FROM (SELECT current_setting('max_connections')::int AS max_conn,
current_setting('superuser_reserved_connections')::int
+ coalesce(current_setting('reserved_connections', true)::int, 0) AS reserved,
(SELECT count(*) FROM pg_stat_activity WHERE backend_type = 'client backend') AS used) x;
-- Breakdown by database, user, application and state
SELECT datname, usename, application_name, state,
count(*) AS sessions,
max(now() - state_change) AS longest_in_state
FROM pg_stat_activity
WHERE backend_type = 'client backend'
GROUP BY datname, usename, application_name, state
ORDER BY sessions DESC;
-- Role and database connection limits
SELECT rolname, rolconnlimit FROM pg_roles WHERE rolconnlimit <> -1;
SELECT datname, datconnlimit FROM pg_database WHERE datconnlimit <> -1;Qué hace
Muestra los slots de conexión usados y los que quedan para usuarios normales en relación con max_connections, el desglose por base de datos/usuario/aplicación/estado y los CONNECTION LIMIT configurados.
Cuándo usarlo
Ante errores 'too many clients already' / 'remaining connection slots are reserved', durante la planificación de capacidad o al evaluar la necesidad de un pooler.
Precaución
max_connections solo limita los client backends; los autovacuum workers, background workers y walsenders usan slots aparte. Los últimos superuser_reserved_connections slots (más reserved_connections en PG16+) quedan cerrados a los usuarios normales. En lugar de subir max_connections a cientos o miles, use un pooler como PgBouncer: cada conexión es un proceso independiente, y los costos de memoria y de snapshots crecen con el número de conexiones. Muchas sesiones 'idle' indican un pool de aplicación sobredimensionado. Evite que una aplicación desbocada consuma todos los slots con ALTER ROLE ... CONNECTION LIMIT; cambiar max_connections requiere reinicio.
Relacionado
- Terminar un backend (pg_terminate_backend)
- Cancelar una consulta en ejecución (pg_cancel_backend)
- Mostrar consultas activas y bloqueantes
- Construir el árbol de bloqueos (encontrar el bloqueador raíz)
- Inspeccionar en detalle las esperas de bloqueo por objeto y modo de bloqueo (pg_locks)
- Encontrar transacciones de larga duración e 'idle in transaction'