2010-11-15 63 views
0

好的,我们有两个数据库服务器,一个由我们拥有,一个由合作伙伴拥有。我们的合作伙伴最近一直有问题,导致我们无数的SQL超时错误,从而导致整个系统崩溃。我们宁愿限制这些查询可能花费的时间来表示最多20秒,否则退出尝试并抛出错误(我们可以使用try/catch块来捕获)。.net 3.5中的隔离SQL Server查询

几个问题:

  1. 有没有一种方法来设置特定的数据库/连接字符串X秒后超时?
  2. 这是隔离其他系统的最佳方式吗?还是有更好的方法去解决这个问题?

感谢

+0

你想尝试在ASP.NET或SQLServer上设置连接超时吗?你不能在连接字符串中设置它,但你可以在sqlconnection对象上。你可以发布一些代码吗? – jcolebrand 2010-11-15 23:02:59

+0

我无法发布任何代码。老实说,我只是在写这个问题时想到了设置超时时间,所以我没有考虑这个问题。我会研究并更新 – Prescott 2010-11-15 23:16:25

+0

是的,没错,这是一个非常愚蠢的问题。连接字符串中的commandTimeout可以正常工作。 – Prescott 2010-11-15 23:21:10

回答

1

愚蠢的问题 - 的CommandTimeout在连接字符串将足以满足我的需求。

0

这些类型的问题最好由SQL Server Resource Governor解决。资源调控器将限制工作负载可以消耗的内存和CPU的数量。您可以将服务器拆分为两个工作负载,并分配50%,这样您和您的合作伙伴每个都可以占用50%的服务器资源。这比设置CommandTimeout(必须为每个SqlCommand单独设置,将其设置为连接字符串没有任何效果)要好得多,因为命令超时不仅会影响双方(即滥用资源受害者),但也为时已晚:在服务器速度较慢之后,commandTimeout将仅反应。此外,一个派对可以通过小命令频繁使用滥用资源。

+0

但是如果你知道一个特定的查询是长时间运行的,那么在_that_ query上要求宽大处理是否合理?然后,您不必更改默认管理 – jcolebrand 2010-11-16 01:16:29

+0

当我读取OP时,它不需要宽大,而是干预,而不是:在服务器没有响应时,提前降低commandtimeout以提前超时。 – 2010-11-16 01:21:30

+0

在连接字符串中设置CommandTimeout将不起作用?那么为什么甚至是一个选项?我很乐意使用资源管理器 - 但我们使用的是SQL 2005.我花了很大的努力尝试升级,但最终我们更容易转移到自己的系统。 – Prescott 2010-11-16 02:29:51