Maison > base de données > tutoriel mysql > Pourquoi ma requête SQL est-elle rapide dans SSMS mais lente dans ASP.NET, et comment puis-je corriger cette disparité de performances ?

Pourquoi ma requête SQL est-elle rapide dans SSMS mais lente dans ASP.NET, et comment puis-je corriger cette disparité de performances ?

Mary-Kate Olsen
Libérer: 2024-12-31 11:28:11
original
857 Les gens l'ont consulté

Why is my SQL query fast in SSMS but slow in ASP.NET, and how can I fix this performance disparity?

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 :

  • Utilisation de l'option (Optimiser pour INCONNU) : Cela oblige SQL Server à recompiler la requête à chaque fois qu'elle est exécutée, quelles que soient les valeurs des paramètres.
  • Éviter les dynamiques SQL : les instructions SQL dynamiques, construites à l'aide de la concaténation de chaînes, peuvent déclencher le reniflage de paramètres. Envisagez plutôt d'utiliser des requêtes paramétrées.
  • Utilisation de procédures stockées : les procédures stockées sont compilées une fois et réutilisées, éliminant ainsi le besoin de détecter les paramètres.
  • Utilisation des astuces de requête : les astuces de requête, telles que RECOMPILE, peuvent être utilisées pour forcer la requête recompilation.
  • Comprendre les plans d'exécution : L'analyse des plans d'exécution dans SSMS et ASP.NET peut aider à identifier la cause première des différences de performances.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal