4 votes

Une requête d'insertion SQL Azure dix fois plus lente sur la V12 que sur la V11 ?

Il y a environ deux semaines, j'ai remarqué une dégradation des performances de l'une de nos applications avec un backend SQL Azure. Elle fonctionne sous V12 sur le niveau S1 90 % du temps, avec parfois une mise à l'échelle vers S2, S3 ou P1.

En fait, les temps d'exécution des requêtes étaient beaucoup plus lents, surtout pour les requêtes INSERT. J'ai donc testé et évalué, testé et évalué, puis testé et évalué encore. À chaque étape, j'ai essayé d'éliminer les facteurs incertains de l'équation. Il s'est avéré que depuis que nous sommes passés à la V12, les performances de S1 sont beaucoup plus lentes qu'auparavant.

Ce que j'ai finalement trouvé était facile à reproduire : Créer deux nouvelles bases de données Sample (Adventureworks_LT) dans le portail Azure. Une sur un nouveau serveur V12, et l'autre sur un nouveau serveur V11. Les deux sont de niveau S1.

Ensuite, je fais mon benchmark (en quelque sorte) sur les deux :

DECLARE @start_time DATETIME, @end_time DATETIME
    SET @start_time = CURRENT_TIMESTAMP

    DECLARE @cnt INT = 0;
    DECLARE @until INT = 100;
    DECLARE @timeNow DATETIME;

    WHILE @cnt < @until
    BEGIN
       Set @timeNow = CURRENT_TIMESTAMP;

       INSERT INTO dbo.ErrorLog
        (   
            ErrorTime,
            UserName,
            ErrorNumber,
            ErrorMessage
        ) 
        VALUES 
        (    
            @timeNow,
            'BENCHMARK',
            DATEDIFF(MILLISECOND,@timeNow,CURRENT_TIMESTAMP),
            'BENCHMARK'
       )

       SET @cnt = @cnt + 1;
       WAITFOR DELAY '00:00:00:500'; /* wait 500 miliseconds*/
    END

    SET @end_time = DateAdd(MILLISECOND,(@until)*-500.,CURRENT_TIMESTAMP)
    /*subtract 500ms per iteration to make up for the built-in delay*/

    SELECT DATEDIFF(ms, @start_time, @end_time) as 'total query execution time', DATEDIFF(ms, @start_time, @end_time)/@until as 'average query execution time'

    SELECT  * FROM sys.dm_db_resource_stats;

Mes résultats :

Temps d'exécution moyen V11 : 17ms

Temps d'exécution moyen V12 : 131ms

La différence est plus grande pour certaines courses que pour d'autres, mais la V11 est nettement plus performante que la V12 à chaque fois.

sys.dm_db_resource_stats ne montre aucun signe de dépassement des limites DTU, ni même d'en être proche. Alors, que pensez-vous qu'il se passe ici ? Je suis convaincu que je suis sur quelque chose, mais le support technique de Microsoft ne cesse de me dire d'optimiser, d'augmenter l'échelle, de profiler vos requêtes, etc.

Je suppose que je cherche simplement quelqu'un qui a eu une expérience similaire et qui a réussi à trouver une cause profonde avec Microsoft, ou même quelqu'un qui peut me dire que mon benchmark n'est pas bon.

0 votes

J'ajoute simplement que, bien que je ne sois pas un expert du fonctionnement interne de SQL Server ou de SQL Azure, je suis conscient que je fais 100 transactions distinctes. En regroupant les 100 insertions en une seule transaction, ce test aurait probablement les mêmes performances sur tous les niveaux possibles, tant sur V11 que sur V12. Cependant, le batching n'est presque jamais possible lorsque vos requêtes sont appelées par différentes requêtes dans un environnement d'application web. Par conséquent, si ma base de données de niveau S1 a obtenu une surcharge supplémentaire sur chaque transaction, comme je le soupçonne, cela aura un impact sévère sur les performances globales de mes applications.

1voto

enter.net Points 51

J'ai reçu une réponse du support technique de Microsoft qui est assez logique. En tout cas pour les recherches futures :

Quelle que soit la plateforme, les éditions (pas Web/Biz) fournit la capacité d'assurer les DTU et les contraintes de réponse telles que spécifiées par https://azure.microsoft.com/en-us/documentation/articles/sql-database-benchmark-overview/#metrics (voir la section "Métriques") Les contraintes de temps de réponse pour la base et standard sont exprimées en secondes à la barre du percentile 90 et donc implicitement ne garantissent pas la moyenne de l'ordre des ms.

Pour résumer : Nous ne pouvons pas comparer les performances de V1 et V12 en mesurant la moyenne des millisecondes pour compléter une déclaration spécifique.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X