将 SqlCommand 的 CommandTimeout 设置为高值是否有任何负面影响?

Is there any negative effect to setting SqlCommand's CommandTimeout to a high value?

当存储过程花费的时间超过默认超时值时,我似乎 运行 遇到了一些随机问题;我被告知

所以我增加了价值,这似乎有所帮助。

但这让我想知道:为什么不总是把它设为一个非常大的数字,以防查询或操作需要很长时间?不会因为这是允许的 MAX 就需要那么长时间吧?

既然如此(我想),为什么默认值会这么低(我相信是 30 秒)?

更新

我最初将 SqlCommand 的 CommandTimeout 值设置为 300(5 分钟),但是我得到了 "Context Switch Deadlock occurred." 所以我将它减少到 120(2 分钟),这似乎或多或少 "sweet spot" 对我来说。我确实在几次测试中得到了 "Timeout expired" 一次,但是当我重试相同的精确范围时,它第二次成功完成,所以我猜它只是 "one of those things" - 120 有时是不够的超时,但 300 显然太多了。 IOW,这种在太少和太多之间的平衡似乎并不 "an exact science."

超时只会限制您等待的最大可能时间。它不会让快速的事情花费更长的时间。

有时候你无能为力,一个功能很荒谬,而且会花费很长的时间。在这种情况下,更长的超时时间是必要的。

但是,希望情况并非总是如此,因为用户通常不想等待很长时间。 如果用户停止等待,那么您可能会浪费资源 创建一些不会被使用的东西。此外,您还可能 让用户等待 ,如果他们不小心选择了超出预期的操作。

我的建议是保持合理的超时,并且只在必要的有限情况下延长它们。

在一个完全不同的主题上,可以更改功能以使其 运行 更快(例如过滤以处理更少的数据、预聚合更快处理的中间总计、索引,and/or查询优化。)有时候一个索引可以是2分2秒的差别。