4

J'ai déplacé une API Web asp.net existante d'une machine virtuelle Azure (avec IIS et MSSQL installée localement) vers une application Web Azure et une base de données Azure SQL (les deux Europe de l'ouest). Je remarque une augmentation dramatique de la durée de traitement entre les deux pour la même charge de travail. Les tâches qui durent entre 10 et 15ms sur la machine virtuelle prennent au moins 150ms dans l'environnement de service hébergé. Les deux traitements internes, sans compter la latence réseau vers/depuis le vm ou l'application Web. Les deux avec des bases de données vides et la même base de code. Même schéma de base de données avec la même indexation.Lenteur des performances Azure 'Web App' + Azure SQL DB

La machine virtuelle était une simple machine SSD à 2 coeurs/7 Go. Mais même lorsque je mets mon application web à un premium 4-core/7GB et ma base de données à un premium 250DTU, la performance n'augmente pas du tout. En fait, c'est la même chose sur une application Web de base à 2 cœurs et une base de données 10DTU. Donc, le goulot d'étranglement doit être ailleurs.

Comment pourrais-je trouver les causes du ralentissement du traitement? L'application Web et la base de données n'indiquent aucune alerte de performances et ne conseillent pas non plus de passer à l'échelle supérieure.

+0

Lorsque vous parlez local, voulez-vous dire votre machine locale ou une machine sur site sur le même réseau? – univ

Répondre

0

Exécutez la requête suivante par session/charge de travail pour savoir quel est le type d'attente se produisant au cours de ces charges de travail:

--La requête ici

go 

select * 
from sys.dm_exec_session_wait_stats 
where session_id = @@spid 
order by wait_time_ms desc 

La dernière instruction SELECT vous fournira toutes les attentes pour la session en cours.

Vous pouvez également activer Query Store.

http://www.sqlcoffee.com/Azure_0010.htm

et exécutez la requête suivante pour savoir ce qui fait des requêtes attendre lors de l'exécution

select wait_category_desc, sum(total_query_wait_time_ms) as [sum ms], count(*) as [interval cnt], avg(avg_query_wait_time_ms) as [avg ms], sum(total_query_wait_time_ms/avg_query_wait_time_ms) as [wait cnt] 
from sys.query_store_wait_stats 
group by wait_category_desc 
order by [sum ms] desc 

L'article suivant vous dira la signification de chaque catégorie d'attendre.

https://docs.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-query-store-wait-stats-transact-sql

Hope this helps.