Как исправить ошибку 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
- В чем может быть причина?
- нигде не нашел информацию сколько максимум можно указать MaxPoolSize (ngpsql)? Могу ли указать 1000?
Ответы (1 шт):
Ваше приложение неправильно построено. При каждом запросе к БД у вас создаётся новое соединение с БД. Так делать не нужно. Это сильно увеличивает нагрузку на БД и время выполнения. postgresql борется с этим и ограничивает количество подключений (до 1000), что вы его не положили. Вы должны использовать одно соединение для работы с БД. Его нет смысла закрывать и открывать новое.
Если у вас нет сейчас возможности изменить логику работы сервера, то используйте bgbouncer. Это прослойка между вашим приложением и БД. Он берёт все ваши подключения и соединяет их в 1, чтобы не нагружать БД. Но это в каком-то роде костыль.
Важно: Ни в коем случае не увеличивайте количество возможных подключений! Это не решение проблемы, ваша БД и скорость работы сервера будут страдать, пока БД не откажет в обслуживании и не прекратит работать