2012-02-24 63 views
5

什麼是最常見和易於實施的解決方案,以提高SQL Server 2008R2數據庫的速度& .Net 3.5應用程序。用緩存提高SQL服務器的性能可行嗎?

我們有一個應用程序,具有以下屬性:
- 少數同時客戶端(MOST約200)。
- 在SQL服務器端的複雜數學運算
- 我們都在模仿一些Oracle的row-level security(因此使用TVF的和storedprocs,而不是直接查詢表) -The主要問題是,用戶執行的大量更新/插入/刪除/計算,他們因爲需要等待頁面重新加載而完成這些操作而嚇壞了。

我需要澄清的問題如下:

  1. 什麼是快:從SQL Server返回的整個數據集,並在C#方執行的數學函數,或SQL方面進行運算功能(因此,沒有返回額外的列)。還是隻有硬件依賴?
  2. 緩存是否會提高性能(例如,如果我們添加redis緩存)。或緩存解決方案只適用於大量客戶端?
  3. 預先計算某些數據並將其存儲在數據庫的某個位置是不好的做法(所以,當用戶請求時,它已經被計算)。或者這就是緩存想要做的事情?如果這不是一個錯誤的做法,那麼當有可用資源時,如何配置SQL Server進行計算?
  4. 如果緩存仍然需要轉到數據庫並查看是否有更新記錄,緩存如何提高性能?

一般建議和意見也歡迎。

回答

7

讓我們的答案分開兩個部分,查詢執行和緩存來提高,業績的表現。 我相信你應該先解決你的SQL服務器上的負載問題,並嘗試優化它上面運行的進程到最大限度,這應該可以解決實現任何緩存的大部分需求。

從你的問題看來,你有一個用於事務性處理,也爲聚合/計算,這往往會導致衝突時,這兩個任務鎖定對方資源的系統。執行數學運算的長查詢可以鎖定/保持UI所需的對象。 優化這些系統並行工作並提高查詢效率是提高性能的關鍵。

首先,我會用你的問題。什麼更快?取決於您正在執行的實際聚合,如果您正在處理集合操作(​​即列的SUM/AVG),請將其保留在SQL中,另一方面,如果您在過程中發現自己有光標,請將其移至C#。光標會殺死你的表現! 你問過把數據聚合在一邊,後來查詢該存儲庫是不好的做法,這是最佳做法:)。您最終將擁有一個數據庫來處理事務性高速客戶端和另一個存儲彙總信息的數據庫,這將快速輕鬆地滿足您的其他需求。將它帶到下一步將會產生一個數據倉庫,所以當你有很多信息和計算時,這絕對是你想要標題的地方。

最後,緩存,這很棘手,真的取決於您的需求的具體性質,我會說採取上述方法,花時間改進過程,我期望最終的結果將使緩存冗餘。

你最好的朋友之一是SQL Profiler,在stmt上運行一個跟蹤:完成以查看什麼是最高持續時間/ io/cpu並首先選擇它們。

祝你好運!

+1

絕對贊同SQL Profiler – 2012-02-25 07:18:35