API web de Azure: espera de una conexión SQL cada 4 minutos y 30 minutos

Dentro de una solicitud en un ApiController, estoy rastreando la duración de la espera de la conexión Sql para abrir.

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


Si mi solicitud no se llama durante al menos 5 minutos, cualquier llamada nueva verá la duración deOpenAsync ser enorme (c. 3s) en lugar de inmediato.

Me gustaría entender la razón para erradicar esa locura lenta.

ACTUALIZAR

Creé un punto final solo para abrir elSqlConnection. Si espero más de 5 minutos, llame a esoOpenConnection punto final luego llame a cualquier otra solicitud, elOpenConnection incurrirá en el costo de espera mencionado anteriormente, pero la solicitud no lo hará.

Por lo tanto, he programado un trabajo en Azure para que se ejecute cada minuto y llame alOpenConnection punto final. Sin embargo, cuando hago solicitudes desde mi cliente http, incurro en el tiempo de espera. Como si abriera elSqlConnection estaba vinculado de alguna manera a la ip del cliente http ...

Además, esas ventanas de 5 minutos son típicas de DNS TTL ... Sin embargo, 3 segundos para una búsqueda de DNS del punto final de la base de datos es demasiado largo. No puede ser eso.

ACTUALIZACIÓN 2

El tiempo observado en el nivel de cliente htt parece ser el resultado de esperar tanto la conexión como de otras latencias (¿búsqueda de DNS?).

Aquí hay una tabla que resume lo que observo:

ACTUALIZACIÓN 3

La diferencia entre la fila 3 y 4 de mi tabla es el tiempo que pasé en TCP / IP Connect y HTTPS Handshake según Fiddler. No nos centremos en eso en esa publicación, sino solo en el tiempo que pasamos esperando elSqlConnection abrir.

ACTUALIZACIÓN 4

De hecho, creo que los dos tiempos de espera tienen la misma razón.
El servidor necesita "mantener viva" su conexión a la base de datos y el cliente necesita "mantener viva" su conexión al servidor.

ACTUALIZACIÓN 5

Tenía un trabajo cada 4 minutos para abrir elSqlConnection pero de vez en cuando incurría en el costo de la espera. Entonces, creo que el tiempo de inactividad es de 4 minutos, no de 5 (por lo tanto, actualicé el título de esta publicación).
Así que actualicé mi trabajo programado para que se ejecutara cada minuto. luego me di cuenta de que todavía estaba incurriendo en el costo de espera, pero regularmente cada 30 minutos (por lo tanto, actualicé el título de esta publicación).
Estas dos veces se correlaciona extrañamente con las deTiempo de espera inactivo de Azure Load Balancer.

Respuestas a la pregunta(0)

Su respuesta a la pregunta