3

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

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

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

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

更新

我最初将 SqlCommand 的 CommandTimeout 值设置为 300(5 分钟),但这样我得到了“发生上下文切换死锁”。所以我把它减少到 120(2 分钟),这对我来说似乎或多或少是“甜蜜点”。在几次测试中,我确实有一次“超时已过期”,但是当我重试相同的确切范围时,它第二次成功完成,所以我想这只是“其中之一” - 120 有时还不够超时,但 300 显然太多了。IOW,这种太少和太多之间的平衡行为似乎不是“一门精确的科学”。

4

1 回答 1

4

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

有时您无能为力,而一个功能就是荒谬的,并且需要很长的时间。在这种情况下,更长的超时时间是必要的。

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

我的建议是保持合理的超时,并且只在必要的有限场景中扩展它们。

在完全不同的主题上,人们可能能够更改功能以使其运行得更快(例如过滤以使用更少的数据、预先聚合更快的中间总计、索引和/或查询优化。)有时索引可以是 2 分钟和 2 秒之间的差异。

于 2015-11-24T17:25:58.720 回答