【发布时间】:2015-11-24 02:20:50
【问题描述】:
当存储过程花费的时间超过默认超时值时,我似乎遇到了一些随机问题;我被告知here。
所以我增加了价值,它似乎有所帮助。
但这让我想知道:为什么不总是把它设为一个非常高的数字,以防查询或操作需要很长时间?不是因为这是允许的 MAX 就需要那么长时间,对吧?
既然如此(我想),为什么默认值会这么低(我相信是 30 秒)?
更新
我最初将 SqlCommand 的 CommandTimeout 值设置为 300(5 分钟),但这样我得到了“发生上下文切换死锁”。所以我把它减少到 120(2 分钟),这对我来说似乎或多或少是“甜蜜点”。在几次测试中,我确实有一次“超时已过期”,但是当我重试相同的确切范围时,它第二次成功完成,所以我想这只是“其中之一” - 120 有时还不够超时,但 300 显然太多了。 IOW,这种太少和太多之间的平衡行为似乎不是“一门精确的科学”。
【问题讨论】:
-
另外,如果出现问题并导致查询运行时间比正常时间长,并且您增加了超时时间,您将获得更多内存争用、锁定等问题,这可能会使事情变得更糟。
-
如果查询锁定任何表,我们将超时设置为短(持续时间有意义)是很正常的。
标签: c# sql-server sqlcommand command-timeout