SQL超时已过期2秒查询

时间:2010-12-15 15:57:49

标签: asp.net sql sql-server stored-procedures

问题是我有一个存储过程在Sql Server Management Server中以2秒的时间运行,但是当从代码调用相同的存储过程时它会超时。

当它从SSMS正确运行时,它应该返回大约30行。

我尝试了几种不同的方法从代码调用过程,但每次都有相同的结果。这刚刚开始发生,昨天它工作正常。

为我们调用该过程的首选方法是使用Linq2Sql,它给出以下错误消息:

  

超时已过期。超时期限   在完成之前已经过去了   操作或服务器不是   响应。描述:未处理   期间发生了异常   执行当前的Web请求。   请查看堆栈跟踪了解更多信息   有关错误的信息和位置   它起源于代码。

     

异常详细信息:   System.Data.SqlClient.SqlException:   超时已过期。超时期限   在完成之前已经过去了   操作或服务器不是   响应。

     

来源错误:

Line 16:         public IMultipleResults GetTournamentRatingNonComplaintData([global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "DateTime")] System.Nullable<System.DateTime> startdate, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "DateTime")] System.Nullable<System.DateTime> enddate, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> officialSportID, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Char(1)")] System.Nullable<char> gender, [global::System.Data.Linq.Mapping.ParameterAttribute(DbType = "Int")] System.Nullable<int> level)
Line 17:         {
Line 18:             IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), startdate, enddate, officialSportID, gender, level);
Line 19:             return ((IMultipleResults)(result.ReturnValue));
Line 20:         }

有谁知道在SSMS中运行它和通过代码之间的区别是什么?可以采取哪些措施来解决这个问题?

2 个答案:

答案 0 :(得分:6)

您从SQL Management Studio的连接可能与您在.NET中使用的连接字符串的配置不同。

例如,请参阅SQL Management Studio工具/选项/查询执行/ SQL Server / Advanced中默认设置的选项。

我怀疑两种环境之间的某些设置不同会导致您的问题。要进行调试,您应该尝试将SQL Server Management Studio配置为在运行SP之前使用与.NET连接字符串相同的配置。

或者,将SET语句添加到.NET查询中以配置您在Management Studio中配置的所有选项。

找到不同的设置并不总是很容易 - 根据我的经验,常见的原因是不同的ANSI设置。

答案 1 :(得分:0)

是存储过程吗?在SSMS中,您是运行存储过程还是仅运行查询。 我在SQL中遇到了Paramter Sniffing,这可能会导致长时间运行的Store过程。谷歌参数嗅探,你会发现如何避免它的选项。 它将参数分配给SP内的局部变量并使用它们而不是实际参数