Estoy ejecutando una base de datos SQL de Azure en la edición S2 (50 DTU). El uso normal del servidor generalmente se cuelga alrededor del 10% de DTU. Sin embargo, este servidor entra regularmente en un estado donde enviará el uso de DTU de la base de datos al 85-90% durante horas. Luego, de repente, vuelve al uso normal del 10%.
Las consultas contra el servidor desde la aplicación todavía parecen estar funcionando rápidamente durante este estado sobrecargado.
Puedo escalar el servidor desde S2 => cualquier cosa (S3, por ejemplo) => S2 y parece borrar cualquier estado en el que esté colgado. Pero unas horas más tarde volverá a repetir el mismo ciclo de estado sobrecargado. Otra cosa extraña que he notado es que si ejecuto este servidor en un plan S3 (100 DTU) 24/7, no he observado este comportamiento. Solo parece ocurrir cuando reduje la escala de la base de datos a un plan S2 (50 DTU). En el plan S3 siempre estoy sentado con un uso de DTU del 5-10%. Obviamente subutilizado.
Revisé los informes de consultas SQL de Azure en busca de consultas falsas, pero realmente no veo nada inusual y muestra mis consultas utilizando recursos como era de esperar.
Sin embargo, como podemos ver aquí, el uso proviene de Data IO. Si cambio el informe de rendimiento aquí para mostrar las principales consultas de Data IO de MAX, vemos esto:
Mirar estos deseos de larga duración parece apuntar a actualizaciones de estadísticas. Realmente no hay nada que se ejecute desde mi aplicación. Por ejemplo, la consulta 16302 allí muestra:
SELECT StatMan([SC0], [SC1], [SC2], [SB0000]) FROM (SELECT TOP 100 PERCENT [SC0], [SC1], [SC2], step_direction([SC0]) over (order by NULL) AS [SB0000] FROM (SELECT [UserId] AS [SC0], [OrganizationId] AS [SC1], [Id] AS [SC2] FROM [dbo].[Cipher] TABLESAMPLE SYSTEM (1.250395e+000 PERCENT) WITH (READUNCOMMITTED) ) AS _MS_UPDSTATS_TBL_HELPER ORDER BY [SC0], [SC1], [SC2], [SB0000] ) AS _MS_UPDSTATS_TBL OPTION (MAXDOP 16)
Pero, de nuevo, el informe también muestra que estas consultas solo utilizan un pequeño porcentaje del uso de Data IO en el servidor (<4%). También ejecuto actualizaciones de estadísticas (y reconstrucciones de índice) en toda la base de datos semanalmente como parte de su mantenimiento regular.
Aquí hay otro informe que muestra las consultas de IO de datos MAX para un intervalo de tiempo que cubre varias horas solo durante el incidente de alto uso de recursos.
Como podemos ver, en realidad no hay ninguna consulta que informe sobre el uso significativo de datos IO.
También he corrido sp_who2
y sp_whoisacive
en la base de datos y realmente no veo nada que me salte a la vista (aunque admito que no soy un experto con estas herramientas).
¿Cómo me doy cuenta de lo que está pasando aquí? No creo que ninguna de mis consultas sobre la aplicación sea la responsable del uso de este recurso y tengo la sensación de que hay un proceso interno ejecutándose en segundo plano en el servidor que lo está matando.