Измерить использование подключений относительно max_connections
PostgreSQLСессииКоманда
-- 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;Что делает
Показывает использованные слоты подключений и оставшиеся для обычных пользователей относительно max_connections, разбивку по базам данных/пользователям/приложениям/состояниям и настроенные CONNECTION LIMIT.
Когда использовать
При ошибках 'too many clients already' / 'remaining connection slots are reserved', при планировании ёмкости или при оценке необходимости пулера.
Внимание
max_connections ограничивает только клиентские backend; рабочие процессы autovacuum, фоновые процессы и walsender используют отдельные слоты. Последние superuser_reserved_connections слотов (плюс reserved_connections в PG16+) закрыты для обычных пользователей. Вместо увеличения max_connections до сотен или тысяч используйте пулер, такой как PgBouncer: каждое подключение — отдельный процесс, а затраты памяти и снимков растут с числом подключений. Множество сессий 'idle' указывает на завышенный размер пула приложения. Не давайте вышедшему из-под контроля приложению занять все слоты через ALTER ROLE ... CONNECTION LIMIT; изменение max_connections требует перезапуска.
Связанные материалы
- Завершить backend (pg_terminate_backend)
- Отменить выполняющийся запрос (pg_cancel_backend)
- Показать активные и блокирующие запросы
- Построить дерево блокировок (найти корневой блокирующий процесс)
- Детально изучить ожидания блокировок по объектам и режимам блокировки (pg_locks)
- Найти долгие транзакции и транзакции в состоянии 'idle in transaction'