Запрос ядра EF не может активировать базу данных Azure Sql (бессерверный номер SKU) и истекает время ожидания - PullRequest
0 голосов
/ 01 августа 2020

Я использую EF Core с одним из моих приложений для запроса базы данных Azure Sql. Это бессерверный номер SKU, который масштабируется до нуля (переходит в спящий режим) после 1 часа бездействия.

Теперь в этом приложении есть запланированная функция для запроса базы данных в определенные моменты времени. Часто это происходит в то время, когда БД спит. Чтобы компенсировать это, я использую в DbContext.cs следующее:

optionsBuilder.UseSqlServer(connection, opt => opt.EnableRetryOnFailure(
    maxRetryCount: 20,
    maxRetryDelay: TimeSpan.FromSeconds(30),
    errorNumbersToAdd: null
));

. Если задержка распределена равномерно, получается среднее значение 15 с, с 20 повторными попытками => таймаут через 5 минут.

Я подумал, что этого должно быть достаточно, поскольку при запросе к спящей базе данных с помощью SSMS обычно требуется менее 1 минуты, чтобы начать работу. Однако это не так, функции регулярно выходят из строя, и запросы не выполняются.

Есть ли лучший способ справиться с этим, чем просто еще большее увеличение времени ожидания? Неужели 5 минут действительно недостаточно?

Ура

1 Ответ

0 голосов
/ 04 августа 2020

Думаю, теперь он работает. Приведенный выше фрагмент кода из ядра EF относится к любым случаям command timeout. Однако, поскольку база данных спала во время запроса, это была проблема connection timeout. Я исправил это, добавив Connect Timeout=120 в саму строку подключения.

...