存储过程间歇性地超时!

Joh*_*dol 7 sql sql-server stored-procedures timeout sql-server-2000

我从代码中调用了许多存储过程ExecuteNonQuery.

这一切都很好但是我的存储过程中有2个在今天间歇性地开始计时:

超时已过期.操作完成之前经过的超时时间或服务器没有响应.该语句已终止.

如果我从管理工作室手动执行sp,它仍然很好.

我的数据库中最近没有更改 - 我的命令超时是默认值.

任何线索?

编辑

针对SP的桌子正在运行它的巨大 - > 15 Gigs.重新启动该框 - 同样的问题,但这次无法让sp从Management Studio运行.

谢谢!

Sam*_*rum 7

Management studio在运行的查询/命令上设置无限超时.代码中的数据库连接将具有默认超时,您可以在命令对象上更改该超时.


Mic*_*mel 6

尝试重新编译这些过程.我几次遇到这样的问题并没有找到问题的原因,但重新编译总是有帮助的.

编辑:

要重新编译proc,你去管理工作室,打开程序修改并点击F5或执行:EXEC sp_recompile'proc_name'


Mar*_*ell 5

这通常与以下内容有关:

  • 由于过度热切的计划重用(参数嗅探)导致错误的查询计划
  • 不同的SET选项 - 特别是ANSI_NULLS和CONCAT_NULL_YIELDS_NULL
  • 锁定(您可能具有更高的隔离级别)
  • 索引需要重建/统计更新/等

SET选项可能导致某些索引类型无法使用(例如,持久计算列的索引 - 包括"提升的"xml/udf查询)


Joh*_*dol 2

好的 - 这就是我最终修复它的方法。

包含 4500 万条记录的表上的聚集索引正在杀死我的 SQL 服务器 - 每次代码插入都会导致答案中描述的令人讨厌的超时。增加超时容忍度并不能解决我的可扩展性问题,因此我尝试使用索引并将主键上的聚集索引设为非聚集来解锁这种情况。

我希望对此发表评论,以便更好地理解这是如何解决问题的。