особенность

росе на ApiController я отслеживаю время ожидания открытия соединения Sql.

await t.TrackDependencyAsync(async() => { await sqlConnection.OpenAsync(); return true; }, "WaitingSqlConnection");


Если мой запрос не будет вызван как минимум на 5 минут, то при любом новом вызове будет отображаться продолжительностьOpenAsync быть огромным (ок. 3 с) вместо немедленного.



Я хотел бы понять причину искоренить эту сумасшедшую медлительность.

ОБНОВИТЬ


Я создал конечную точку, чтобы открытьSqlConnection, Если я подожду более 5 минут, позвонитеOpenConnection конечная точка затем вызывает любой другой запрос,OpenConnection будет нести стоимость ожидания, упомянутую выше, но запрос не будет.

Поэтому я запланировал задание на Azure запускать каждую минуту и ​​вызыватьOpenConnection конечная точка. Однако, когда я делаю запросы от моего http-клиента, я беру время ожидания. Как будто открылиSqlConnection был как-то связан с http-клиентом ip ...


Кроме того, эти 5 минутные окна типичны для DNS TTL ... Однако 3s для поиска DNS конечной точки базы данных слишком длинные. Этого не может быть.

ОБНОВЛЕНИЕ 2


Время, наблюдаемое на уровне клиента htt, похоже, является результатом ожидания соединения, а также некоторых других задержек (поиск DNS?).


Вот таблица, обобщающая то, что я наблюдаю:

ОБНОВЛЕНИЕ 3


Разница между строками 3 и 4 моей таблицы - это время, проведенное в TCP / IP Connect и HTTPS Handshake, согласно Fiddler. Давайте не будем заострять внимание на этом посте, а только на времени, потраченном на ожиданиеSqlConnection открыть.


ОБНОВЛЕНИЕ 4


На самом деле я думаю, что оба времени ожидания имеют одну и ту же причину.
Сервер должен «поддерживать» свое соединение с базой данных, а клиент должен «поддерживать» свое соединение с сервером.

ОБНОВЛЕНИЕ 5

У меня была работа каждые 4 минуты, чтобы открытьSqlConnection но время от времени это стоило ожидания. Поэтому я думаю, что время бездействия составляет 4 минуты, а не 5 (следовательно, я обновил заголовок этого сообщения).
Поэтому я обновил свою запланированную работу, чтобы она запускалась каждую минуту. затем я понял, что это все еще несет стоимость ожидания, но регулярно каждые 30 минут (следовательно, я обновил название этого поста).
Эти два раза странно коррелируют сТайм-аут простоя балансировщика нагрузки Azure.