在SQL Server Profiler中记录数据传输时间

时间:2010-09-22 14:34:43

标签: sql sql-server tsql sql-server-profiler

我经常使用SQL Server分析器检查冗余或性能不佳的查询。

但是有一个事件(在巨型列表中)允许您记录将数据从数据库传输到应用程序所需的总时间吗?

对于返回比应用程序中所需数据更多的数据的查询,这将是一个非常好的指标。

2 个答案:

答案 0 :(得分:2)

一旦数据离开SQL Server,它就会受到硬件(NIC和网络延迟)的影响。

您通常会在客户端对此进行分析。

使用SQL事件探查器观察查询执行的读取次数。这是一个很好的指标。使用'SELECT *'的查询通常无法使用覆盖索引,因此请查找书签查找。

答案 1 :(得分:1)

听起来我想要识别返回大型结果集的查询。更深层次的是,您真正想要做的是确定哪些查询消耗了最大量的数据。这可以从逻辑读取和物理读取两方面来看。

要在报告中查看此信息,您可以使用免费提供的Performance Dashboard Reports或使用SQL Server DMV。

例如,以下查询来自Glenn Berry的优秀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;