Может ли слишком много неактивных соединений повлиять на производительность PostgreSQL 9.2?

8

Некоторые запросы на моем сервере базы данных, кажется, требуют много времени для ответа, и я считаю, что загрузка ЦП высока. При работе ps auxя вижу ~ 250 «незанятых» соединений (которых я считаю слишком много). Я не начал делать полный диагноз, но я хотел знать, является ли это хорошим местом, чтобы начать искать.

Я также использую PgBouncer с пулами на уровне транзакций. Я подозреваю, что могу легко уменьшить количество idleподключений, настроив размер пула. Тем не менее, я не хочу начинать делать слишком много изменений, если нет веских причин для этого.

Могут ли многие idleсоединения в PostgreSQL 9.2 повлиять на производительность?

Огромное спасибо!

Хуан Карлос Кото
источник
что значит "слишком много свободных соединений"? десятки? сотни?
jap1968
Отредактированный вопрос. Спасибо за указание на это. Просто чтобы прояснить, последний счет был ~ 250
Хуан Карлос Кото
Может быть? Я знаю, что администратор базы данных Oracle попросил людей настроить свои средства разработки на использование одного сеанса для всех окон (вместо нового сеанса для каждого окна), когда база данных разработки начала работать очень медленно. Точное число, которое считается «слишком большим», вероятно, будет зависеть от ресурсов, доступных для вашей базы данных.
FrustratedWithFormsDesigner

Ответы:

3

Я серьезно сомневаюсь, что пустые соединения - ваша проблема. PostgreSQL очень способен обрабатывать неактивные сеансы, поскольку они почти не требуют ресурсов. Активные сеансы, с другой стороны, являются более вероятной причиной медлительности.

См. Https://wiki.postgresql.org/wiki/Number_Of_Database_Connections для справки о количестве соединений с базой данных.

Макс Вернон
источник
Бесполезные сессии с незафиксированными транзакциями часто являются непослушными преступниками!
Philᵀᴹ
Я согласен, Фил, хотя на самом деле дело не в PostgreSQL, а в том, как пишется клиентская часть (если я что-то упустил).
Макс Вернон,
Пожалуйста, смотрите связанный вопрос об этом . Это действительно помогло бы, если бы вы выбрали это. Спасибо!
Хуан Карлос Кото
На самом деле простаивающие соединения имеют много (памяти) накладных расходов, и их следует избегать (я думаю, что они выделяют около 10 МБ на соединение, поэтому в вашем случае вы бы тратили не менее 2,5 ГБ памяти)
Kedare
1
@MaxVernon - на моем работающем сервере postgresql 9.5 у меня 25 незанятых процессов для столбца RES, шт. Процесс занимает в среднем около 12 МБ (диапазон: от 4,5 до 584 МБ, я подозреваю, что более крупные из них имеют незагруженную передачу).
18:18