sql s'exécute rapidement dans ssms lente dans asp.net
J'ai eu ce problème pour un couple de semaines maintenant. Le problème est que la requête prend 4-5 minutes pour s'exécuter sur le site et pas plus de 2 ou 3 secondes à s'exécuter dans ssms. J'ai aussi trouvé qu'une fois que j'ai un changement à cette requête, comme l'ajout de la customerId variable, il va commencer à courir vite sur la page web, mais dès le lendemain, il est lent à nouveau. La requête en question est celui-ci:
DECLARE @customerID INT
SET @customerID = @CustID
DECLARE @MyTable table(
Iden int NOT NULL IDENTITY(1,1),
ProductID int)
INSERT INTO @MyTable(ProductID)
SELECT P.ProductID FROM Product P WITH (NOLOCK)
left join Compunix_ProductMMY cpmmy with (nolock) on p.ProductID = cpmmy.ProductID
left join Compunix_CustomerMMY ccmmy with (nolock) on ccmmy.mmyid = cpmmy.mmyid
WHERE P.Deleted=0 AND P.Published=1 and (ccmmy.customerid = @customerID OR cpmmy.productid IS NULL)
SELECT c.Name, c.SeName, c.CategoryID
FROM Category c WITH (NOLOCK)
JOIN ProductCategory PC With (NOLOCK) ON C.CategoryID = PC.CategoryID
JOIN @MyTable MT ON PC.ProductID=MT.ProductID
WHERE C.Published = 1
GROUP BY c.Name, c.SeName, c.CategoryID
ORDER BY c.Name
J'ai la même requête en cours d'exécution sur 2 autres site qui fonctionnent tout aussi bien. La seule différence entre les sites est qu'ils sont exécutés sur différentes bases de données et la lenteur du site a un peu plus que le double de produits (54000 produits) par rapport aux 2 autres. L'ensemble des trois sites et de leurs bases de données sont hébergés sur la même machine.
OriginalL'auteur Ben | 2012-04-16
Vous devez vous connecter pour publier un commentaire.
Les Chances sont que vous frapper sur un problème avec la détection des paramètres.
Je suggère la lecture de Lenteur dans l'Application, Rapide dans SSMS? par Erland Sommarskog pour obtenir une compréhension complète de la question (article long mais très bon).
OriginalL'auteur Oded
Prendre un coup d'oeil à sys.dm_exec_sessions pour votre ASP.Net application et pour votre SSMS session. Je vais hasarder une conjecture qu'au moins l'un de vos
SET
paramètres est différent. Cela peut contribuer à des plans différents (en fin de compte cela est attribué à la détection des paramètres) et le côté app finit généralement par être pire.Voir ces autres questions pour beaucoup plus de détails:
Procédure stockée lent lorsqu'il est appelé à partir du web, rapide de Management Studio
Procédure de ADO.NET mais pas dans SSMS
Requête lorsqu'il est exécuté à partir du web, mais super-rapide lors de l'exécution de SSMS
ADO .NET vs SQL Server Management Studio - ADO effectue pire
Les choses
SET ARITHABORT
,SET QUOTED_IDENTIFIER
, etc. technet.microsoft.com/en-us/library/ms190707(v=sql.105).aspxOriginalL'auteur Aaron Bertrand
J'ai eu le même problème, dans mon cas, il a été lié à la planète MARS, j'ai donc enlevé
MultipleActiveResultSets=True;
de chaîne de connexion et maintenant temps d'exécution sont presque les mêmes (0,2 s différence en comparant à 4,5 s)Vous êtes les bienvenus
OriginalL'auteur RezaRahmati
Pour ce que sa vaut le coup, très occasionnellement, nous rencontrons le même problème; peut-être une fois par an. Vous pouvez passer une bonne semaine de lecture et la digestion de toutes ces merveilleuses ressources mentionnées dans les autres réponses, ou vous pouvez faire ce que nous faisons; arrêt et de démarrage de SQL Server.
Il fonctionne un régal.
Nous avons remarqué que ce problème se produit généralement à la suite de différents schémas/sp/afficher les mods qui ne peuvent pas être directement liées au problème à portée de main.
OriginalL'auteur DJA
Êtes-vous à l'aide de tout
orm
? Si vous utiliseznhibernate
, vous pouvez activer db suivi dansnhibernate
et voir ce qui pourrait être la question. Suivants sont quelques-uns des scénarios que j'ai observé dans de tels scénarios:nvarchar
être utilisé à la place devarchar
). Vous pouvez observer la nhibernate paramètre de mappage dans ses journaux.Nhibernate
utiliselog4net
et vous avez juste besoin d'ajouter un appender comme indiqué ici:https://devio.wordpress.com/2010/04/14/logging-sql-statements-generated-by-nhibernate/
OriginalL'auteur Sharath