HI,
我有一个sql存储过程,我通过使用我的asp.net(2.0)代码调用 sqlCom.ExecuteNonQuery(),但它需要大约60到100秒才能完成,而我从sql查询工具执行相同的SP会在3到4秒内运行。
请帮忙。
编辑 - 评论代码:
public int ExecuteNonQuery(string strSpName, DbParameter[] parameterValues)
{
CreateConnection();
SqlCommand sqlCom = new SqlCommand();
if (strSpName == null || strSpName.Length == 0)
throw new ArgumentNullException("strSpName");
int i = 0;
sqlCom.Connection = _sqlConn;
if (_blnIsTransEnabld == true)
sqlCom.Transaction = _sqlT;
sqlCom.CommandType = System.Data.CommandType.StoredProcedure;
sqlCom.CommandText = strSpName;
sqlCom.CommandTimeout = _sqlConn.ConnectionTimeout;
return sqlCom.ExecuteNonQuery();
}
答案 0 :(得分:1)
答案 1 :(得分:1)
这通常是过时统计数据的症状。建议你重建统计数据:
exec sp_updatestats
答案 2 :(得分:1)
我建议不更新统计信息或对存储过程进行任何更改,直到收集执行计划,因为这会将执行计划丢弃在缓存中任何进一步调查是否是实际问题的尝试。
计划的下降可能会导致您认为问题已解决,但如果问题是参数嗅探,则可能会重新出现。
首先按照本答复中的建议获取SSMS和C#的执行计划。
Very different execution times of SQL query in C# and SQL Server Management Studio
如果您已经保存了这些内容,您可以使用XML更新您的问题吗?
编辑:实际上可能更好的方法是使用SQL分析器捕获Showplan XML Statistics Profile
事件并获取C#的实际执行计划。如果它是生产服务器,请不要让探查器跟踪的运行时间超过最低限度。
答案 3 :(得分:0)
首先,看一下代码,我希望你有一些东西来关闭你在这里使用的连接。
至于您的问题,在您正在访问的数据上发出锁定的事务上是否还有其他查询待处理? 这可以解释执行时间长;如果您访问的数据被某些其他查询锁定,则执行将等待锁定被释放或超时。
要确定是否存在锁定问题,您可以使用SQL Server Management Studio。打开管理/活动监视器以获取挂起锁定列表。
要防止锁定问题,请确保尽快提交或回滚所有待处理的事务。有几种方法可以解决死锁问题。通常,您可以一起阻止它们,例如通过重新排序事务中的查询。如果这不是一个选项,您可能想要更改事务的隔离级别或使用table hints。