2015-11-04 131 views
1

我們的LOB應用程序中有一些功能允許用戶定義自己的查詢以檢索應用程序中報告和列表的數據。我們遇到的問題是,有時他們寫的這些查詢非常沉重(有時是錯誤的),並導致服務器上的大量負載。創建SQL Server沙箱

刪除這些功能是沒有問題的,但我想知道是否有辦法在SQL Server中創建某種類型的沙箱,以便它們執行的查詢只分配一定數量的資源來執行,因此不會讓他們有機會對使用該系統的其他人造成任何損害。有任何想法嗎?

+0

「,它允許用戶定義自己的查詢來檢索應用程序中報告和列表的數據」 - 這是您的第一個錯誤!爲什麼?因爲「...有時這些查詢他們寫了一個非常沉重的(有時是錯誤的)」除了你必須小心SQL注入和你的用戶可以自由地編寫可憐的查詢(並且可能不正確)之外,查找'資源總監「。 –

+0

這聽起來像你想看看資源調控https://msdn.microsoft.com/en-us/library/bb933866(v=sql.120).aspx –

回答

0

資源調控器已在上述評論中提及。我能想到的另一個解決方案是使用SQL Server高可用性組

在我工作的最後一個地方有這樣的設置。有一個主服務器負責將所有事務寫入數據庫的事務,並在主服務器出現故障時使用輔助服務器。除此之外,我們還向可用性組添加了只讀副本。

這樣做的主要目的是在主服務器停機的情況下,您將自動轉移到另一個副本。將應用程序連接到數據庫時,將其連接到可用性組而不是特定的服務器。然後,如果服務器出現故障,您將自動轉到輔助服務器。但是,它也可以用於優化應用程序功能,只需要通過卸載主服務器進行只讀訪問。

,我們知道這只是需要只讀訪問那麼我們就可以連接到可用性組,並添加到連接字符串ApplicationIntent=READONLY這意味着我們正在使用的只讀副本而不是主,留下的任何功能常規交易的主要資料。 (IIRC,默認情況下,主要將接受任何讀/寫連接,所以你必須配置主不接受只讀連接)

無論如何,閱讀了有關這個開球點是在這裏:https://msdn.microsoft.com/en-us/library/ms190202.aspx