Dilemme d'optimisation des requêtes : SQL lent dans ASP.NET par rapport à SSMS
Dans un problème intrigant d'optimisation des requêtes, un développeur a été intrigué par une disparité de performances substantielle entre une requête exécutée dans SSMS et la même requête exécutée sur leur site Web ASP.NET. La requête affiche dans un premier temps des performances satisfaisantes sur le site après modifications, pour revenir à la lenteur le lendemain.
Pour plus de contexte, la requête en question implique des jointures et sous-requêtes complexes, notamment un filtrage dynamique basé sur un identifiant client. paramètre (@customerID). Il récupère les données de plusieurs tables, notamment Product, Compunix_ProductMMY, Compunix_CustomerMMY, Category et ProductCategory.
Curieusement, cette même requête fonctionne parfaitement sur deux autres sites Web, indiquant que le problème est localisé sur ce site Web spécifique. Le seul facteur distinctif est que le site en difficulté héberge un nombre de produits considérablement plus important (54 000) par rapport aux autres. Tous les sites Web et bases de données résident sur le même serveur physique.
Cause première : Reniflage de paramètres
Après enquête, il est fort probable que le problème provienne du reniflage de paramètres, un piège de performances courant dans SQL Server. Le reniflage de paramètres implique une opération d'optimisation dans laquelle SQL Server analyse la première exécution d'une requête et détermine un plan d'exécution approprié en fonction des valeurs de paramètres rencontrées.
Cependant, si les valeurs des paramètres changent lors des exécutions ultérieures, le plan d'exécution peut ne s'adapte pas en conséquence, ce qui entraîne des performances sous-optimales. Dans le cas de cette requête, il est possible que l'exécution initiale dans SSMS utilise des valeurs de paramètres différentes de celles dans ASP.NET, conduisant à des plans d'exécution et à des résultats de performances différents.
Stratégies d'atténuation
Pour résoudre ce problème, le développeur peut envisager de mettre en œuvre des stratégies qui atténuent le reniflage des paramètres, telles que :
En les mettant en œuvre techniques, le développeur peut surmonter le problème de détection des paramètres et garantir des performances cohérentes pour sa requête sur SSMS et ASP.NET.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!