【发布时间】:2012-12-16 23:06:50
【问题描述】:
我有一个在 SQL Server 管理工作室中执行需要 5-10 秒的存储过程。
当从 C# 调用时,它会在 10 分钟后超时:
cmd.CommandTimeout = 600;
我使用 sp_recompile 重新编译查询,还使用 DBCC DROPCLEANBUFFERS 和 DBCC FREEPROCCACHE 来清除任何缓存和执行计划,但均无济于事。
我已经搜索和搜索,但我只找到了指向我上面尝试过的答案。所以我在想,也许我错过了一些更明显的东西?
public static void Action_StoredProc(SqlConnection conn, Boolean map, string acc) {
SqlCommand cmd = new SqlCommand("Action_StoredProc", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add("@map", SqlDbType.Bit).Value = map;
cmd.Parameters.Add("@acc", SqlDbType.VarChar).Value = acc;
cmd.CommandTimeout = 600;
cmd.ExecuteNonQuery();
}
【问题讨论】:
-
您是否正确处理了 SqlConnection?
-
在管理工作室中的 5-10 秒是结果出现之前所需的时间,还是产生所有结果所需的完整时间?
-
AndrásOttó - 是的 @Damien_The_Unbeliever - 这是一系列更新语句,所以没有结果可以产生,但是是的,完成整个 sp 需要 5-10 秒
-
受影响表上有任何索引吗?
-
差异可能是由于两个连接上的 ARITHABORT 设置不同而导致的不同计划使用,原因可能是参数嗅探。关于这个主题的规范阅读; Slow in the Application, Fast in SSMS?
标签: c# sql sql-server