2010-06-03 19 views
1

我們有一個網絡服務,提供酒店搜索。性能有問題:對服務的單個請求大約需要5000毫秒。幾乎所有的時間都是通過執行存儲過程花費在數據庫中的。在請求期間,我們的服務器(mssql2008)消耗了大約90%的處理器時間。當兩個請求並行進行時,平均時間增加並且大約爲7000毫秒。當請求數量增加時,平均響應時間也在增加。我們每分鐘有20-30個請求。針對SQL Server的性能優化:減少存儲過程執行時間還是卸載服務器?

哪種優化是在這種情況下,具有記住,我們的目標是爲服務提供穩定的響應時間,最佳:

1)儘量減少存儲過程的執行時間

2)嘗試找到如何卸載服務器的方式

從處理預訂網站的人那裏聽到這個消息很有意思。

+0

創建索引以滿足您的查詢工作負載... – 2010-06-03 14:12:30

+0

建立索引,創建臨時表的主鍵,儘可能使用表提示 – Tim 2010-06-03 14:16:20

回答

1

我認爲你要做的第一件事是量化服務器上​​發生了什麼。

  1. 使用SQL Server Profiler獲取服務器上活動的準確圖片。
  2. 確定哪些程序/ SQL語句佔用資源最多
  3. 識別高優先級的SQL操作消耗了大量的資源/抽空
  4. 優先化
  5. 修復

現在,當我說「修復「,我的意思是你應該在SSMS中手動執行程序/語句 - 確保你已經打開了」顯示執行計劃「。

查看消耗最多資源的零件的執行計劃,然後弄清楚如何糾正該問題。您可能需要創建新索引,使用提示重寫SQL以提高效率等。

+0

好的建議,我通常在優化存儲過程時試圖遵循指導原則 – Tim 2010-06-04 05:18:11

2

從預訂網站的人 聽到很有趣。謝謝!

這與預訂網站無關,您的存儲過程寫得不好,可能沒有索引,您的查詢可能不是SARGAble,它必須每次掃描表。你的統計數據是否最新?

運行從SSMS一些特效,並期待在執行計劃

也是一個好主意來運行探查。如果你的頁面預期壽命和緩衝區緩存命中率,看看Use sys.dm_os_performance_counters to get your Buffer cache hit ratio and Page life expectancy counters得到這些數字

+0

公平起見,他們可能已經存儲了特效和服務器,沒有足夠的果汁來提供音量。但我敢打賭,糟糕的存儲特效或不好的數據庫設計(比如說使用EAV表格) – HLGEM 2010-06-03 17:31:15

+0

SQLMenace,最初的問題是關於策略,在實現這些類型的系統時應該堅持的策略,但是從本質上來說,它隱含地回答了:存儲過程應該優化 – Tim 2010-06-04 05:10:47

0

您沒有提供詳細信息來解決您的問題。一般而言,增加一個存儲過程我看的性能:

1)去除任何光標或基於組操作循環
2)確保所有查詢都使用索引,並使用高效的執行計劃(檢查之SET SHOWPLAN_ALL ON
3)確保沒有鎖定或阻塞減緩下來(see the query given here

沒有對細節的詳細信息,這是很難做出的任何建議。

幾乎所有的時間都花在 數據庫上,通過執行存儲 程序。

應用程序調用了多少個過程?他們在做什麼?涉及交易?重新編譯每個調用的過程是什麼?你有沒有索引?統計信息是否最新?等等......你需要提供更多的信息,或者這裏的任何幫助都是一個完整的猜測。

+0

實際上問題是關於策略:應該優化過程還是找到另一種方式來處理問題,並且它被隱式地回答:程序應該優化 – Tim 2010-06-04 05:15:06