我一直在頻繁地使用SQL Server分析器來檢查冗餘或性能不佳的查詢。在SQL Server Profiler中記錄數據傳輸時間
但是,是否有一個事件(巨型列表中)允許您記錄將數據從數據庫傳輸到應用程序所需的總時間?
這將是一個非常好的指標,用於返回比應用中需要的數據更多的數據的查詢。
我一直在頻繁地使用SQL Server分析器來檢查冗餘或性能不佳的查詢。在SQL Server Profiler中記錄數據傳輸時間
但是,是否有一個事件(巨型列表中)允許您記錄將數據從數據庫傳輸到應用程序所需的總時間?
這將是一個非常好的指標,用於返回比應用中需要的數據更多的數據的查詢。
這聽起來像你想要識別返回大型結果集的查詢。如果將此級別設置得更深一些,那麼您真正想要做的是確定哪些查詢正在消耗最大數量的數據。這可以從邏輯讀取和物理讀取兩方面來看。
爲了在報告中查看此信息,您可以使用免費提供的Performance Dashboard Reports或使用SQL Server DMV。
例如,下面的查詢已經從優秀SQL Server Performance Blog採取格倫·貝瑞:
/* Top Cached SPs By Total Logical Reads (SQL 2008). Logical reads relate to memory pressure */
SELECT TOP(25) p.name AS [SP Name], qs.total_logical_reads AS [TotalLogicalReads],
qs.total_logical_reads/qs.execution_count AS [AvgLogicalReads],qs.execution_count,
ISNULL(qs.execution_count/DATEDIFF(Second, qs.cached_time, GETDATE()), 0) AS [Calls/Second],
qs.total_elapsed_time, qs.total_elapsed_time/qs.execution_count
AS [avg_elapsed_time], qs.cached_time
FROM sys.procedures AS p
INNER JOIN sys.dm_exec_procedure_stats AS qs
ON p.[object_id] = qs.[object_id]
WHERE qs.database_id = DB_ID()
ORDER BY qs.total_logical_reads DESC;
謝謝,我會給這個鏡頭。 – 2010-09-23 07:53:44
@Joachim VR:不客氣,很高興幫助! – 2010-09-23 08:05:33
注意:該查詢只顯示緩存的SP。如果服務器處於內存壓力下,它可能無法提供清晰的圖像。 – 2011-01-09 06:37:43
一旦數據離開SQL Server,它就受到硬件(網卡和網絡延遲)的擺佈。
您通常會從客戶端事件中進行分析。
使用SQL事件探查器來觀察查詢執行的讀取次數。這是一個很好的指標。使用'SELECT *'
的查詢通常不能使用覆蓋索引,因此請查找書籤查找。
有一個'RowCounts'列,您可以使用此。 – 2010-09-22 14:36:05
行數不是問題。我們有一些非常龐大的表格,有很多列,但大多數時候我們只需要選擇幾列而不是SELECT *。 – 2010-09-22 14:38:32