Medir o uso de conexões em relação ao max_connections
PostgreSQLSessõesComando
-- 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;O que faz
Mostra os slots de conexão usados e os que restam para usuários comuns em relação ao max_connections, a divisão por banco/usuário/aplicação/estado e os CONNECTION LIMITs configurados.
Quando usar
Em erros 'too many clients already' / 'remaining connection slots are reserved', durante o planejamento de capacidade ou ao avaliar a necessidade de um pooler.
Atenção
max_connections limita apenas os client backends; workers do autovacuum, background workers e walsenders usam slots separados. Os últimos superuser_reserved_connections slots (mais reserved_connections no PG16+) ficam fechados para usuários comuns. Em vez de elevar max_connections a centenas ou milhares, use um pooler como o PgBouncer: cada conexão é um processo separado, e os custos de memória e de snapshot crescem com o número de conexões. Muitas sessões 'idle' indicam um pool da aplicação superdimensionado. Impeça que uma aplicação desgovernada consuma todos os slots com ALTER ROLE ... CONNECTION LIMIT; mudar max_connections exige restart.
Relacionados
- Encerrar um backend (pg_terminate_backend)
- Cancelar uma consulta em execução (pg_cancel_backend)
- Mostrar consultas ativas e bloqueadoras
- Montar a árvore de bloqueios (encontrar o bloqueador raiz)
- Inspecionar em detalhe as esperas de lock por objeto e modo de lock (pg_locks)
- Encontrar transações longas e 'idle in transaction'