sql在asp.net中慢速运行ssms

我已经有这个问题了几个星期了。 问题是,查询需要4-5分钟在网站上运行,最多2或3秒钟才能在ssms中运行。 另外我发现,在对这个查询做了一些改变,比如添加customerIdvariables后,它会在网页上快速运行,但是到第二天又会变慢。 有问题的查询是这样的:

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 

我有两个其他网站上运行相同的查询工作就好了。 这两个站点之间的唯一区别在于,它们运行在不同的数据库上,慢速站点比其他站点上的产品(54000个产品)多一倍以上。所有这三个站点及其数据库都托pipe在同一台机器上。

有机会,你是在参数嗅探问题。

我build议在应用程序中selectSlow,在SSMS中selectFast? 由Erland Sommarskog得到一个完整的理解这个问题(长文章,但非常好)。

看看你的ASP.Net应用程序和你的SSMS会话sys.dm_exec_sessions。 我会猜测至less有一个SET设置是不同的。 这可能有助于不同的计划(最终这归结于参数嗅探),而应用程序端通常会变得更糟。

有关更多详细信息,请参阅其他问题:

当从Web上调用存储过程时,速度很慢,来自Management Studio

过程从ADO.NET中超时,但不在SSMS中

从Web执行时查询超时,但从SSMS执行时超快

ADO .NET与SQL Server Management Studio – ADO性能较差

对于它的价值,偶尔我们遇到同样的问题。 可能是一年一次。 你可以花一个愉快的周阅读和消化所有其他答案中提到的那些美妙的资源,或者你可以做我们做的事情; 停止并启动SQL Server。

它工作的一种享受。

我们已经注意到这个问题一般发生在各种不同的schema / sp / view模块之后,这些模块可能并不直接关系到手头的问题。