особенность
росе на 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.