在SQL Server探查器中记录数据传输时间

在SQL Server探查器中记录数据传输时间,sql,sql-server,tsql,sql-server-profiler,Sql,Sql Server,Tsql,Sql Server Profiler,我经常使用SQLServerProfiler来检查冗余或性能差的查询 但是,是否有一个事件(在巨大的列表中)允许您记录将数据从数据库传输到应用程序所需的总时间 对于返回的数据超过应用程序所需的查询,这将是一个非常好的指标。一旦数据离开SQL Server,它将取决于您的硬件(NIC和网络延迟) 您通常会从事物的客户端分析它 使用SQL事件探查器观察查询执行的读取次数。这是一个很好的指标。使用'SELECT*'的查询通常不能使用覆盖索引,因此请查找书签查找。我觉得您似乎想要识别返回大型结果集的查询

我经常使用SQLServerProfiler来检查冗余或性能差的查询

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


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

一旦数据离开SQL Server,它将取决于您的硬件(NIC和网络延迟)

您通常会从事物的客户端分析它


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

我觉得您似乎想要识别返回大型结果集的查询。再深入一层,您真正想要做的是确定哪些查询消耗的数据量最大。这可以从逻辑读取和物理读取两个方面看到

为了在报告中查看此信息,您可以使用免费提供的或使用SQL Server DMV

例如,格伦·贝里(Glenn Berry)的《卓越》杂志提供了以下查询:

/* 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;

有一个
RowCounts
列可用于此操作。行数不是问题所在。我们有一些非常大的表,其中有很多列,但大多数情况下我们只需要选择几列,而不是一个select*。谢谢,我来试一试。注意:该查询只显示缓存的SP。如果服务器内存不足,它可能无法给出清晰的图像。