У меня есть функция Azure Durable, которая взаимодействует с базой данных PostgreSQL, также размещенной в Azure.
База данных PostgreSQL имеет ограничение соединения 50, и, кроме того, моя строка соединения ограничивает размер пула соединений до 40, оставляя место для подключений суперпользователя / администратора.
Тем не менее, при некоторых нагрузках я получаю ошибку
53300: оставшиеся слоты подключения зарезервированы для подключений суперпользователя без репликации
Эта документация от Microsoft казалась актуальной, но не похоже, что я могу сделать статический клиент, и, как упоминается,
, потому что вывсе еще могут заканчиваться соединения, вам следует оптимизировать соединения с базой данных.
У меня есть этот метод
private IDbConnection GetConnection()
{
return new NpgsqlConnection(Environment.GetEnvironmentVariable("PostgresConnectionString"));
}
, и когда я хочу взаимодействовать с PostgreSQL, я делаю вот так
using (var connection = GetConnection())
{
connection.Open();
return await connection.QuerySingleAsync<int>(settings.Query().Insert, settings);
}
Итак, я создаю (и уничтожаю) множество NpgsqlConnection
объектов, но согласно this , это должно быть хорошо, потому что соединениеОбъединение происходит за кулисами.Но в функциях Azure может быть что-то недействительное.
Я заметил, что у меня много свободных соединений (из pgAdmin): На основании этого япробовал поиграться с параметрами соединения Npgsql , такими как Connection Idle Lifetime
, Timeout
и Pooling
, но проблема слишком большого количества соединений, кажется, сохраняется в той или иной степени.Кроме того, я попытался ограничить число одновременных функций оркестровщика и функций (см. этот документ ), но это, кажется, частично противоречит цели масштабируемости функций Azure.Это помогает - я получаю меньше ошибок из-за слишком большого числа подключений).Предположительно, если я продолжу тестировать его с меньшими числами, я могу даже устранить его, но, опять же, похоже, что он побеждает точку, и может быть другое решение.
Как я могу использовать PostgreSQL с функциями Azure, не увеличивая до максимумасоединения?