J'exécute une base de données Azure SQL sous l'édition S2 (50 DTU). L'utilisation normale du serveur se bloque généralement autour de 10% DTU. Cependant, ce serveur entre régulièrement dans un état où il enverra l'utilisation DTU de la base de données à 85-90% pendant des heures. Puis tout d'un coup, cela revient à l'utilisation normale de 10%.
Les requêtes sur le serveur à partir de l'application semblent toujours fonctionner rapidement pendant cet état surchargé.
Je peux faire évoluer le serveur à partir de S2 => n'importe quoi (S3 par exemple) => S2 et il semble effacer tout état dans lequel il est suspendu. Mais quelques heures plus tard, il répétera à nouveau le même cycle d'état surchargé. Une autre chose étrange que j'ai remarquée est que si j'exécute ce serveur sur un plan S3 (100 DTU) 24/7, je n'ai pas observé ce comportement. Cela ne semble se produire que lorsque j'ai réduit la base de données à un plan S2 (50 DTU). Sur le plan S3, je suis toujours assis à 5-10% d'utilisation DTU. Manifestement sous-utilisé.
J'ai vérifié dans les rapports de requêtes Azure SQL à la recherche de requêtes non fiables, mais je ne vois vraiment rien d'inhabituel et cela montre mes requêtes en utilisant les ressources comme je m'y attendais.
Comme nous pouvons le voir ici cependant, l'utilisation provient entièrement de Data IO. Si je modifie le rapport de performances ici pour afficher les principales requêtes d'E / S de données par MAX, nous voyons ceci:
L'examen de ces exigences de longue date semble indiquer des mises à jour des statistiques. Pas vraiment quoi que ce soit à partir de mon application. Par exemple, la requête 16302 montre:
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)
Mais là encore, le rapport montre également que ces requêtes n'utilisent qu'un faible pourcentage de l'utilisation d'E / S de données sur le serveur (<4%). J'exécute également des mises à jour de statistiques (et reconstructions d'index) sur la base de données entière sur une base hebdomadaire dans le cadre de sa maintenance régulière.
Voici un autre rapport qui affiche les requêtes d'E / S de données MAX pour un intervalle de temps qui couvre plusieurs heures uniquement pendant l'incident à forte utilisation des ressources.
Comme nous pouvons le voir, pas vraiment de requêtes signalant une utilisation importante des E / S de données.
J'ai également couru sp_who2
et sp_whoisacive
sur la base de données et je ne vois vraiment rien qui me saute aux yeux (même si je dois admettre que je ne suis pas un expert de ces outils).
Comment savoir ce qui se passe ici? Je ne pense pas qu'aucune de mes requêtes d'application soit à blâmer pour cette utilisation des ressources et j'ai l'impression qu'un processus interne s'exécute en arrière-plan sur le serveur qui le tue.