我們在應用程序中創建瞭如此多的低效率存儲過程,我們總是推遲使其效率更高,直到我們遇到嚴重的數據庫性能問題。最常執行的存儲過程?
現在,我正在考慮通過最常執行的存儲過程逐個修復它。
找出哪個存儲過程執行得最多的最佳方法是什麼?
是否有腳本可以顯示哪個存儲過程執行得最多?
我們在應用程序中創建瞭如此多的低效率存儲過程,我們總是推遲使其效率更高,直到我們遇到嚴重的數據庫性能問題。最常執行的存儲過程?
現在,我正在考慮通過最常執行的存儲過程逐個修復它。
找出哪個存儲過程執行得最多的最佳方法是什麼?
是否有腳本可以顯示哪個存儲過程執行得最多?
用途:
SELECT TOP 10
qt.TEXT AS 'SP Name',
SUBSTRING(qt.text, qs.statement_start_offset/2, CASE WHEN (qs.statement_end_offset = -1) THEN LEN(qt.text) ELSE (qs.statement_end_offset - qs.statement_start_offset)/2 END) AS actual_query,
qs.execution_count AS 'Execution Count',
qs.total_worker_time/qs.execution_count AS 'AvgWorkerTime',
qs.total_worker_time AS 'TotalWorkerTime',
qs.total_physical_reads AS 'PhysicalReads',
qs.creation_time 'CreationTime',
qs.execution_count/DATEDIFF(Second, qs.creation_time, GETDATE()) AS 'Calls/Second'
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE qt.dbid = (SELECT dbid
FROM sys.sysdatabases
WHERE name = '[your database name]')
ORDER BY qs.total_physical_reads DESC
參考:SQL SERVER – 2005 – Find Highest/Most Used Stored Procedure
典型情況..
運行性能分析器 然後啓動你的應用程序 設置一些過濾器捕捉到大量的讀/寫/掃描等。
快速完成此操作的方法是運行SQL Profiler,然後通過TextData對您的跟蹤進行「分組」。
您可能還只想觀看特定事件,如SQL批量完成。如果我記得,那會給你持續時間和其他方便的統計數據進行分組/過濾。
另一個奇妙的工具是Microsoft的Performance Dashboard。 link text
還可以提取'SUBSTRING(文本,statement_start_offset/2,情況下,當(statement_end_offset = -1)然後LEN(文本) 否則(statement_end_offset-statement_start_offset)/ 2端)'用於SP內的實際查詢 – 2009-12-21 22:55:39
@Remus:補充,謝謝! – 2009-12-21 23:05:22
它應該是SUBSTRING(qt.text,qs.statement_start_offset/2,CASE WHEN(qs.statement_end_offset = -1)THEN LEN(qt.text)ELSE(qs.statement_end_offset - qs.statement_start_offset)/ 2 END)AS actual_query, – 2009-12-22 05:27:53