Mesurer l'utilisation des connexions par rapport à max_connections
PostgreSQLSessionsCommande
-- 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;Ce que fait la commande
Affiche les slots de connexion utilisés et ceux restant aux utilisateurs ordinaires par rapport à max_connections, la répartition par base/utilisateur/application/état, et les CONNECTION LIMIT configurés.
Quand l'utiliser
Sur les erreurs 'too many clients already' / 'remaining connection slots are reserved', lors de la planification de capacité, ou pour évaluer le besoin d'un pooler.
Attention
max_connections ne limite que les backends clients ; les workers autovacuum, les background workers et les walsenders utilisent des slots séparés. Les derniers slots superuser_reserved_connections (plus reserved_connections en PG16+) sont fermés aux utilisateurs ordinaires. Au lieu de porter max_connections à des centaines ou des milliers, utilisez un pooler comme PgBouncer : chaque connexion est un processus distinct, et les coûts mémoire et de snapshot croissent avec le nombre de connexions. De nombreuses sessions 'idle' indiquent un pool applicatif surdimensionné. Empêchez une application incontrôlée de consommer tous les slots avec ALTER ROLE ... CONNECTION LIMIT ; modifier max_connections exige un redémarrage.
Voir aussi
- Terminer un backend (pg_terminate_backend)
- Annuler une requête en cours (pg_cancel_backend)
- Afficher les requêtes actives et bloquantes
- Construire l'arbre de blocage (trouver le bloqueur racine)
- Examiner en détail les attentes de verrous par objet et mode de verrou (pg_locks)
- Trouver les transactions longues et 'idle in transaction'