为什么在SQL Server Management Studio中运行<1秒时,使用此代码返回具有9列,89行的表的存储过程需要60秒才能执行(.NET 1.1)?它在本地计算机上运行,因此很少/没有网络延迟,快速开发机器
Dim command As SqlCommand = New SqlCommand(procName, CreateConnection())
command.CommandType = CommandType.StoredProcedure
command.CommandTimeout = _commandTimeOut
Try
Dim adapter As new SqlDataAdapter(command)
Dim i as Integer
For i=0 to parameters.Length-1
command.Parameters.Add(parameters(i))
Next
adapter.Fill(tableToFill)
adapter.Dispose()
Finally
command.Dispose()
End Try
Run Code Online (Sandbox Code Playgroud)
我的参数数组是打字的(对于这个SQL,它只是一个参数)
parameters(0) = New SqlParameter("@UserID", SqlDbType.BigInt, 0, ParameterDirection.Input, True, 19, 0, "", DataRowVersion.Current, userID)
Run Code Online (Sandbox Code Playgroud)
存储过程只是一个select语句,如下所示:
ALTER PROC [dbo].[web_GetMyStuffFool]
(@UserID BIGINT)
AS
SELECT Col1, Col2, Col3, Col3, Col3, Col3, Col3, Col3, Col3
FROM [Table]
Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的C#Web应用程序运行插入查询.当我从SQL Server Management Studio运行查询时,插入查询大约需要五分钟才能完成.从应用程序运行时,它会在30分钟后超时(是分钟,而不是秒).
我从VS调试器中获取了实际的SQL语句并从Mgmt Studio运行它并且工作正常.
所有这些都是从我的开发环境运行,而不是生产环境.查询正在进行时,没有其他SQL Server活动.我正在使用SQL Server 2008 R2进行开发.MS VS 2010 Express,Asp.Net 4.0.SQL Server Mgmt Studio 10.
有一个类似的问题从未得到解答:来自C#.NET的SQL server timeout 2000
这是来自以下的SET选项:dbcc useroptions
Option MgtStudio Application
----------------------- -------------- --------------
textsize 2147483647 -1
language us_english us_english
dateformat mdy mdy
datefirst 7 7
lock_timeout -1 -1
quoted_identifier SET SET
arithabort SET NOT SET
ansi_null_dflt_on SET SET
ansi_warnings SET SET
ansi_padding SET SET
ansi_nulls SET SET
concat_null_yields_null SET SET
isolation level read committed read committed
Run Code Online (Sandbox Code Playgroud)
只有文本化和arithabort是不同的.
任何想法为什么在查询执行时间有这么大的差异,以及我可以做些什么来缩小这种差异?
我不确定查询会有多大用处,特别是因为包含模式会太多.无论如何,这里是:
INSERT INTO …Run Code Online (Sandbox Code Playgroud) 我有一个SQL数据库查询的问题突然(但通常大约每三周)变得缓慢.
安装程序如下:
Orders查询主要选择的表()有大约24000条记录,其他五条连接表小(100条或更少)Orders有一个包含二进制数据(PDF文档)的varbinary(MAX)列Report,平均大小约为200到300 kB(但有时可能高达2 MB).这24000个订单中超过90%的列填充了此列,其他的则是NULL,即6 GB数据库大小的90%以上是二进制数据.有问题的查询具有以下结构:
SELECT TOP (30) [Project2].[OrderID] AS [OrderID]
-- around 20 columns more
FROM ( SELECT [Project2].[OrderID] AS [OrderID],
-- around 20 columns more
row_number() OVER (ORDER BY [Project2].[OrderID] ASC) AS [row_number]
FROM ( SELECT [Filter1].[OrderID] AS [OrderID]
-- around 20 columns more
FROM ( SELECT [Extent1].[OrderID] AS [OrderID]
-- around …Run Code Online (Sandbox Code Playgroud) 我有一个存储过程给我一个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)