2010-11-15 73 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