Я попытался использовать сценарий Nagios для мониторинга количества соединений с базой данных в базе данных Postgres, и я столкнулся с этой проблемой: они считаются открытыми в настоящее время и измеряются каждые 5 минут.
SELECT sum(numbackends) FROM pg_stat_database;
Тем не менее, это, кажется, пропускает огромное количество недолговечных соединений, поэтому статистика далека от реальности.
Я попытался запустить скрипт вручную и заметил большие изменения даже между двумя соединениями, расположенными в нескольких секундах друг от друга.
Как я могу получить эту информацию надежным способом? как Макс (Connectios) произошло в течение промежутка времени.
PgBouncer
перед вашим экземпляром PostgreSQL, он будет ставить в очередь соединения, когда он слишком занят, а не отклонять их. (Да, глупо, что PostgreSQL не может сделать это самостоятельно, но это не простое исправление; см. Бесконечные обсуждения в списках рассылки, посвященных встроенному пулу).log_connections
иlog_disconnections
) в лог-файл (например, csvlog), а затем использовать pgBadger или что-то подобное, чтобы извлечь это из лог-файла?Ответы:
Лучше использовать инструменты мониторинга рабочей нагрузки, например,
pgbadger
для проверки соединений с базой данных и общей нагрузки. Это поможет вам понять, какие пользователи подключаются, сколько времени и какие запросы они запускают. Информацию об установке и настройке pgbadger смотрите на этой странице.Если вы просто хотите проверить количество активных соединений, вы можете использовать
select count(*) from pg_stat_activity where state='active'
источник
Вы можете использовать расширение с local_preload_libraries для этого.
Что-то вроде этого:
Или вместо обновления через NOTIFY
источник