我经常使用SQL Server分析器检查冗余或性能不佳的查询。
但是有一个事件(在巨型列表中)允许您记录将数据从数据库传输到应用程序所需的总时间吗?
对于返回比应用程序中所需数据更多的数据的查询,这将是一个非常好的指标。
答案 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;