2011-07-13 164 views
10

說完看了看周圍使用谷歌大叔淨,我無法找到這個問題的答案:防止緩存在SQL Server

什麼是監測的運行IIS和MS SQL Server生產服務器的性能和響應能力的最佳途徑2005年?

我目前使用Pingdom並希望它指向一個基本上模仿「真實世界查詢」的URL,但由於顯而易見的原因,不希望查詢從緩存運行。該URL將每5分鐘被調用一次。

我無法清除緩存,緩衝區等,因爲這會對生產服務器產生負面影響。我試圖在SELECT語句中使用隨機生成的數字來生成唯一查詢,但仍使用緩存的查詢。

有什麼辦法可以模擬MySQL中的NO_CACHE嗎?

問候

+0

嗨米奇,我們有3個服務器,一個Web,應用程序和數據庫服務器。監視首頁並不代表我們用戶正在經歷的查詢時間或響應性,因此「真實世界查詢」由PHP腳本執行。我修改了原來的問題。 –

+0

IIS和2K5位於不同的服務器上。 –

回答

3

SQL Server沒有結果高速緩存像MySQL或Oracle,讓我有點困惑你的問題。如果您希望服務器重新編譯存儲過程的計劃緩存,則可以使用RECOMPILE執行它。您可以放棄緩衝區緩存,但這會影響所有查詢,如您所知。

在我的公司,我們分別測試可用性和性能。我建議你使用這個查詢來確保你的系統從前端到數據庫一起工作,然後編寫其他測試來檢查各個組件來判斷性能。 SQL Server提供了驚人數量的方法來檢查您是否遇到瓶頸以及它們在哪裏。我廣泛使用PerfMon和DMV。使用PerfMon,我檢查CPU和頁面預期壽命,以及看看我的磁盤隊列有多長。使用DMV,我可以發現我的查詢是否花了太長時間(sys.dm_exec_query_stats),或者如果等待時間很長(sys.dm_os_wait_stats)。

IIS的兩個最大瓶頸往往是CPU和內存,IIS自帶一套PerfMon對象進行查詢,但我並不熟悉這些。

+0

您好諾埃爾,問的原因是我有一個查詢需要10秒鐘執行第一次,第二次只需要2秒。改變客戶端或日期(仍然使用相同的表格等),它會回到第一次運行10秒鐘,後續運行2秒鐘。 –

+0

Jim,它聽起來像SQL Server正在緩存內存中的頁面,否則您將從磁盤讀取,因此您看到不同的查詢時間。我發現你試圖通過隨機字符來防止計劃重用,但這不會導致你的緩衝區被丟棄。如果你添加了TOP x,你應該在那裏放置一個隨機的排序順序(ORDER BY NEWID()),或者你應該每次選擇一個隨機範圍的行,這會導致SQL從磁盤讀取數據(如果這些頁面不在其他查詢的記憶中)。 – Noel

17

要清除SQL緩衝區和計劃緩存:

DBCC DROPCLEANBUFFERS 
GO 
DBCC FREEPROCCACHE 
GO 

使用DROPCLEANBUFFERS測試用冷緩衝區高速緩存的查詢,而無需關閉和重新啓動服務器。 (source

使用DBCC FREEPROCCACHE來仔細清除計劃緩存。釋放計劃高速緩存會導致例如重新編譯存儲過程,而不是從高速緩存重用。 (source

+2

值得一提的是,這將清除整個服務器的緩存,所以在生產服務器上運行它可能不是最好的主意。根據數據庫和緩存計劃的數量,它可能需要幾秒到半小時才能完成。 – Groo