2010-09-22 73 views
1

我一直在頻繁地使用SQL Server分析器來檢查冗餘或性能不佳的查詢。在SQL Server Profiler中記錄數據傳輸時間

但是,是否有一個事件(巨型列表中)允許您記錄將數據從數據庫傳輸到應用程序所需的總時間?

這將是一個非常好的指標,用於返回比應用中需要的數據更多的數據的查詢。

+0

有一個'RowCounts'列,您可以使用此。 – 2010-09-22 14:36:05

+0

行數不是問題。我們有一些非常龐大的表格,有很多列,但大多數時候我們只需要選擇幾列而不是SELECT *。 – 2010-09-22 14:38:32

回答

1

這聽起來像你想要識別返回大型結果集的查詢。如果將此級別設置得更深一些,那麼您真正想要做的是確定哪些查詢正在消耗最大數量的數據。這可以從邏輯讀取和物理讀取兩方面來看。

爲了在報告中查看此信息,您可以使用免費提供的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; 
+0

謝謝,我會給這個鏡頭。 – 2010-09-23 07:53:44

+0

@Joachim VR:不客氣,很高興幫助! – 2010-09-23 08:05:33

+0

注意:該查詢只顯示緩存的SP。如果服務器處於內存壓力下,它可能無法提供清晰的圖像。 – 2011-01-09 06:37:43

2

一旦數據離開SQL Server,它就受到硬件(網卡和網絡延遲)的擺佈。

您通常會從客戶端事件中進行分析。

使用SQL事件探查器來觀察查詢執行的讀取次數。這是一個很好的指標。使用'SELECT *'的查詢通常不能使用覆蓋索引,因此請查找書籤查找。