sql在asp.net中以ssms运行速度很快

Ben*_*Ben 19 .net sql asp.net ssms sql-server-2008

我已经有这个问题了几个星期了.问题是查询需要4-5分钟才能在网站上运行,最多需要2或3秒才能在ssms中运行.此外,我发现在对此查询进行更改后,例如添加customerId变量,它将在网页上快速开始运行,但到第二天它再次变慢.有问题的查询是这样的:

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
Run Code Online (Sandbox Code Playgroud)

我在另外两个网站上运行相同的查询,工作得很好.这些站点之间的唯一区别是它们运行在不同的数据库上,慢速站点上的产品(54000个产品)比其他站点多一倍.所有三个站点及其数据库都托管在同一台机器上.

Ode*_*ded 21

您可能会遇到参数嗅探问题.

我建议在应用程序中慢速阅读,在SSMS中快速阅读由Erland Sommarskog全面了解这个问题(长文但非常好).


Aar*_*and 8

查看ASP.Net应用程序和SSMS会话的sys.dm_exec_sessions.我猜你至少有一个SET设置是不同的.这可能导致不同的计划(最终这归因于参数嗅探),并且应用程序方面通常最终会变得更糟.

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

从Web上调用存储过程很慢,快速从Management Studio调用

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

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

ADO .NET与SQL Server Management Studio - ADO表现更差


Rez*_*eza 7

我有同样的问题,在我的情况下它与 MARS 相关,所以我MultipleActiveResultSets=True;从连接字符串中删除,现在 SSMS 和 asp.net 之间的运行时间几乎相同(0.2s 与之前的 4.5s 相比)

注意:MARS = 多个活动结果集。如果在连接字符串上设置此属性,则可以以交错方式在同一连接上运行多个查询。它主要用于允许您在迭代结果集时提交 UPDATE 语句。