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.
la source
Réponses:
Étant donné que pendant les pics, votre activité de journal est minimale, nous pouvons supposer qu'il n'y a pas (ou beaucoup) de DUI en cours.
Vous mentionnez à un moment donné que le pic n'affecte pas les performances, et à un autre point qu'il le fait. Lequel est-ce?
Vous mentionnez également que cela disparaît après une opération de pesage. Cela a du sens car il est analogue à un redémarrage sur site qui tuera efficacement tous les processus, etc.
Dois-je supposer correctement en supposant que cette base de données est accessible à partir du niveau application? Si c'est le cas, je soupçonne que vos connexions ne sont pas fermées correctement . Le garbage collector est censé s'en occuper éventuellement (ce à quoi il ne faut pas se fier), mais j'ai vu cette situation exacte se produire en raison de connexions non fermées du niveau application. Dans notre cas, l'application était tellement occupée que nous avons finalement reçu des erreurs de connexion simultanées, ce qui nous a conduit au problème.
Essayez la requête suivante pendant le pic:
Si je ne me trompe pas, vous trouverez tout un tas d'enregistrements renvoyés avec le statut de
Sleeping
, ou pireRunning
. Si tel est le cas, vous avez des problèmes encore plus importants au niveau de l'application.Nous pouvons poursuivre le débogage en copiant la base de données, en utilisant la requête suivante (en utilisant le niveau de base pour éviter des coûts excessifs) et en surveillant ce comportement.
la source
using
instructions. Les informations que j'ai publiées dans la question d'origine semblent indiquer que les données IO sont responsables des pics.