2008-08-18 80 views
9

我們在SQL Server 2005羣集上發生零星的隨機查詢超時。我擁有一些使用它的應用程序,所以我正在協助調查。當觀察普通ol Perfmon中的%CPU時間時,你當然可以看到它掛鉤了。但是,SQL活動監視器僅給出進程使用的累積CPU和IO時間,而不是正確使用的時間或特定時間範圍內的時間。也許我可以使用探查器並運行蹤跡,但是這個羣集的使用非常繁重,恐怕我會在大海撈針中尋找針。我吠叫錯了樹嗎?識別SQL Server性能問題

有沒有人有一些好的方法來跟蹤這個環境中的昂貴的查詢/進程?

回答

12

這會給你的平均CPU時間的前50個報表,查看這裏的其他腳本:http://www.microsoft.com/technet/scriptcenter/scripts/sql/sql2005/default.mspx?mfr=true

SELECT TOP 50 
     qs.total_worker_time/qs.execution_count as [Avg CPU Time], 
     SUBSTRING(qt.text,qs.statement_start_offset/2, 
      (case when qs.statement_end_offset = -1 
      then len(convert(nvarchar(max), qt.text)) * 2 
      else qs.statement_end_offset end -qs.statement_start_offset)/2) 
     as query_text, 
     qt.dbid, dbname=db_name(qt.dbid), 
     qt.objectid 
FROM sys.dm_exec_query_stats qs 
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt 
ORDER BY 
     [Avg CPU Time] DESC 
2

分析器可能看起來像一根「大海撈針」的方法,但它可能會出現一些有用的東西。在數據庫處於典型負載的情況下,嘗試運行它幾分鐘,然後查看是否有任何疑問突出表現爲花費太多時間或以某種方式佔用資源。雖然這樣的情況可能會導致一些普遍性問題,但也可能與一個或兩個站點的某個特定問題有關,這些問題在某些情況下會造成混亂,導致整個板塊的性能很差。

4

我們使用Quest的Spotlight產品。很明顯,這是對時間和金錢的投資,所以它在短期內可能無法幫到你,但如果你有一個大型的SQL環境,它非常有用。

3

至於雅各布說,運行探查典型負載下幾分鐘,並將結果保存到表,它將允許您針對結果運行查詢,使查找任何資源佔用率查詢變得更容易。

2

針對超過特定讀取次數的查詢運行事件探查器和過濾器。對於我工作的應用程序,任何超過5000次讀取的非報告查詢值得再看一次。你的應用可能有不同的門檻,但這個想法是一樣的。

2

This utility通過Erland Sommarskog是非常有用的。

這是您添加到數據庫的存儲過程。每當你想查看哪些查詢處於活動狀態並獲取鎖,塊等的好圖片時運行它。當事情似乎被抹掉時,我經常使用它。

4

我發現Performance Dashboard Reports非常有幫助。它們是由Microsoft提供的一組自定義RS報告。您只需在客戶端PC上運行安裝程序,然後在SQL Server實例上運行setup.sql。

然後,右鍵單擊SSMS中的某個數據庫(無關緊要),然後點擊Reports - > Custom Reports。瀏覽並選擇默認情況下位於\ Program Files \ Microsoft SQL Server \ 90 \ Tools \ PerformanceDashboard文件夾中的performance_dashboard_main.rdl。你只需要做一次。第一次後,它會顯示在報告列表中。

除了別的以外,主儀表板視圖將顯示CPU利用率。你可以偶爾刷新它。當您看到尖峯時,只需點擊圖表上的條形圖即可獲得詳細數據。