#postgresql
#postgresql
Вопрос:
На моем сервере Azure PostgreSQL общее количество подключений равно 480.
Я хочу проверить, что общее количество текущих подключений обращается к базе данных, выполнив ниже SQL:
select * from pg_stat_activity;
Я вижу, что список вывода включает всех пользователей (суперпользователя, …) и статус ожидания и активности. Так правильно ли это проверять общее количество текущих подключений? Или я должен исключить «незанятые» подключения, чтобы точно узнать результат?
Большое вам спасибо,
Ответ №1:
«простое» соединение — это реальное соединение. Поскольку Postgres не имеет внутреннего пула исполнителей (например, пула потоков MySQL), любое «незанятое» соединение может обрабатывать любые команды. На данный момент «простаивающее» соединение не требует слишком большого количества источников, но когда вы вычисляете лимиты сохранения памяти (против использования swap), вам следует также вычислять и «простаивающие» соединения — потому что любое соединение иногда может быть активным соединением.
480 подключений обычно много — хорошее число составляет 10-20 x ядер процессора max_connections
. Если у вас слишком высокий max_connection
уровень, то у вас должен быть низкий work_mem
, что может негативно повлиять на производительность, или ваша конфигурация не должна быть защищена от перегрузки.
share buffers (max connection * work_mem * 2) ram for operation system
ram for filesystem < RAM
Комментарии:
1. Большое вам спасибо. Это так полезно. Предположим, что из pg_stat_activity у меня 480 подключений (включая незанятые подключения), поэтому другие пользователи не могут получить доступ к базе данных, поскольку соединение заполнено?
2. Вы должны знать, каков ваш
max_connection
предел. После этого ограничения пользователи не могут подключаться к Postgres. Я настоятельно рекомендую установить это значение реалистичным. Лучше запретить подключения, чем иметь перегруженный сервер. Если вам нужно большое количество подключений, используйте pgbouncer или pgpool.3. Да, я, конечно, знаю о пределе max_connection. Просто подумайте, что Postgres будет суммировать общее текущее соединение, включая idle? Я также проверяю, многие незанятые соединения все еще существуют. Возможно, нам потребуется установить idle_in_transaction_session_timeout в Postgres
4. простой сеанс — это сеанс (подключение) — исключений нет