如何在SQL Server 2008中查找性能最差的查詢?如何在SQL Server 2008中查找性能最差的查詢?
我發現下面的例子,但它似乎不工作:
http://www.sqlservercurry.com/2010/03/top-5-costly-stored-procedures-in-sql.html
如何在SQL Server 2008中查找性能最差的查詢?如何在SQL Server 2008中查找性能最差的查詢?
我發現下面的例子,但它似乎不工作:
http://www.sqlservercurry.com/2010/03/top-5-costly-stored-procedures-in-sql.html
十大最差查詢基於...:
SELECT TOP 10
total_worker_time/execution_count AS Avg_CPU_Time
,execution_count
,total_elapsed_time/execution_count as AVG_Run_Time
,(SELECT
SUBSTRING(text,statement_start_offset/2,(CASE
WHEN statement_end_offset = -1 THEN LEN(CONVERT(nvarchar(max), text)) * 2
ELSE statement_end_offset
END -statement_start_offset)/2
) FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
FROM sys.dm_exec_query_stats
--pick your criteria
ORDER BY Avg_CPU_Time DESC
--ORDER BY AVG_Run_Time DESC
--ORDER BY execution_count DESC
查找慢速執行的查詢與SQL事件探查器
SELECT TOP 5 obj.name, max_logical_reads, max_elapsed_time
FROM sys.dm_exec_query_stats a
CROSS APPLY sys.dm_exec_sql_text(sql_handle) hnd
INNER JOIN sys.sysobjects obj on hnd.objectid = obj.id
ORDER BY max_logical_reads DESC
來自SQL Profiler(最好在實時數據庫上)。
運行探查器無疑是一個很好的選擇。一旦你對Profiler功能有了很好的理解,你可以運行痕跡。 – 2010-03-23 13:00:40
只是不要讓分析器在生產服務器本身上運行太久。在它的默認模式下,它是一個資源管理器。 – 2010-03-23 13:01:08
如果你想找到所用的時間表現最差的查詢,我會使用這樣的:
SELECT *
FROM sys.dm_exec_query_stats a
CROSS APPLY sys.dm_exec_sql_text(sql_handle) hnd
ORDER BY total_elapsed_time/execution_count DESC
但是,找到「最差」的查詢往往需要更多地探究exec_query_stats
DMV。有很多事情需要考慮:
total_worker_time/execution_count
現在,這些查詢將突出顯示性能較差的查詢,但通常您可能會詢問具有「公平」性能的查詢,但會非常頻繁地調用,從而降低應用的整體性能。要找到這些,請按total_elapsed
時間(或total_[whatever metric you are interested in]
)訂購以上查詢,並且不要按execution_count
除。
This MSDN Magazine文章提供了有關此主題的出色信息。
+1真棒文章! – 2010-03-23 13:28:51
+1優秀的文章,但2008年遇到麻煩。 – 2010-03-23 13:40:34
@ThomasBratt您可能需要更改數據庫的兼容級別以運行這些查詢。我做到了。 – 2012-11-13 19:06:52
+1對我來說工作得很好。似乎是在返回的行中的一些重複,但看起來正確的:) – 2010-03-23 13:41:18
在行中的重複可能是已經失效的舊版本的查詢計劃(各種原因,統計變化是一個常見的)計劃不會彈出從記憶無效,所以他們出現。另一個原因是參數化(或者說缺少),這意味着許多具有不同參數的類似查詢可以存在於緩存中,發生在臨時SQL而不是存儲過程中,但是當它不是存儲過程時看起來像是大量重複。 – Andrew 2010-03-23 15:12:50
@KM:添加一個輕微的替代答案的intead,如何加入sys.dm_exec_query_plan並拉動查詢計劃 - 總是值得從表現最差的緩存中提取。 – Andrew 2010-03-23 15:14:39