Как исправить ошибку MaxPoolSize (NpgSql) asp.net core?

Буквально два дня назад стала появляться ошибка, то ли после обновления (добавления дополнительных модулей) то ли из за наплыва пользователей

NpgsqlException: The connection pool has been exhausted, either raise MaxPoolSize (currently 100) or Timeout (currently 15 seconds)

Приложение на Asp.net core + postgres + npgsql + dapper Linux + kestrel + Nginx

В репозиториях, везде после запроса закрываю соединение

dbConnection.Close();

Ошибка появляется тогда когда active connection (nginx) 1900-2200

  1. В чем может быть причина?
  2. нигде не нашел информацию сколько максимум можно указать MaxPoolSize (ngpsql)? Могу ли указать 1000?

Ответы (1 шт):

Автор решения: Inventor

Ваше приложение неправильно построено. При каждом запросе к БД у вас создаётся новое соединение с БД. Так делать не нужно. Это сильно увеличивает нагрузку на БД и время выполнения. postgresql борется с этим и ограничивает количество подключений (до 1000), что вы его не положили. Вы должны использовать одно соединение для работы с БД. Его нет смысла закрывать и открывать новое.

Если у вас нет сейчас возможности изменить логику работы сервера, то используйте bgbouncer. Это прослойка между вашим приложением и БД. Он берёт все ваши подключения и соединяет их в 1, чтобы не нагружать БД. Но это в каком-то роде костыль.

Важно: Ни в коем случае не увеличивайте количество возможных подключений! Это не решение проблемы, ваша БД и скорость работы сервера будут страдать, пока БД не откажет в обслуживании и не прекратит работать

→ Ссылка