DBAtlas · Atlas de operaciones de bases de datos

Medir el uso de conexiones respecto a max_connections

PostgreSQLSesiones

Comando

-- 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.

Abrir en DBAtlas →

Relacionado