相关疑难解决方法(0)

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

我有一个存储过程,每次从Web应用程序调用它都会疯狂地超时.

我启动了Sql Profiler并跟踪了那些超时的调用,最后找到了这些东西:

  1. 当从MS SQL Management Studio中执行语句时,使用相同的参数(实际上,我从sql profile trace复制了过程调用并运行它):它以5~6秒的平均值完成.
  2. 但是当从Web应用程序调用时,它需要超过30秒(在跟踪中),因此我的网页实际上超时了.

除此之外,我的web应用程序都有自己的用户事实上,每一件事情是相同的(相同的数据库,连接,服务器等),我也试过直接与Web应用程序的用户的工作室运行查询,并没有花费超过6秒.

我怎样才能知道发生了什么?

我假设它与我们使用BLL> DAL图层或表适配器这一事实无关,因为跟踪清楚地显示了延迟在实际过程中.这就是我所能想到的.

编辑我在这个链接中发现ADO.NET设置ARITHABORT为true - 这在大多数情况下是好的,但有时会发生这种情况,建议的解决方法是向with recompile存储过程添加选项.在我的情况下,它不起作用,但我怀疑它与此非常相似.任何人都知道ADO.NET做了什么或者我在哪里可以找到规范?

asp.net stored-procedures sql-server-2008

94
推荐指数
4
解决办法
6万
查看次数

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

我正在尝试在我维护的Web应用程序中调试SQL超时的来源.我有C#代码的源代码,所以我确切地知道正在运行什么代码.我已经将应用程序调试到执行超时的SQL代码的行,并且我在SQL分析器中观察运行的查询.

当此查询从Web执行时,它会在30秒后超时.但是,当我完全按照Profiler中显示的方式剪切/粘贴查询时,我将其放入SSMS并运行它,它几乎立即返回.我已经跟踪了ARITHABORT在Web正在使用的连接中设置为OFF的问题(也就是说,如果我在SSMS会话中关闭ARITHABORT,它会运行很长时间,如果我将其重新打开,那么它会运行很快).但是,阅读ARITHABORT的描述,它似乎并不适用......我只做一个简单的SELECT,并且根本没有执行任何算法......只有一个带有WHERE条件的INNER JOIN:

为什么ARITHABORT OFF会在此上下文中导致此行为?有什么办法可以改变SSMS对该连接的ARITHABORT设置吗?我正在使用SQL Server 2008.

sql-server ssms sql-server-2008 query-performance arithabort

41
推荐指数
3
解决办法
3万
查看次数

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

我已经有这个问题了几个星期了.问题是查询需要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 …
Run Code Online (Sandbox Code Playgroud)

.net sql asp.net ssms sql-server-2008

19
推荐指数
3
解决办法
2万
查看次数

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

我有一个存储过程给我一个SqlException,因为我从代码运行它时超时(超时设置为30).当我直接在Management Studio中运行该过程时,它会在1秒内执行.我也只在针对特定数据库运行时获得超时.当我使用其他数据库时,它可以快速完成而不会出现错误.这是完整的错误消息:

System.Data.SqlClient.SqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
   at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
   at System.Data.SqlClient.SqlDataReader.get_MetaData()
   at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
   at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
   at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior …
Run Code Online (Sandbox Code Playgroud)

ado.net ssms timeout sql-server-2005 sqlexception

3
推荐指数
1
解决办法
6029
查看次数