我经常使用 SQL Server 分析器来检查冗余或性能不佳的查询。
但是是否有一个事件(在巨大的列表中)允许您记录将数据从数据库传输到应用程序所需的总时间?
对于返回比应用程序所需数据多得多的数据的查询,这将是一个非常好的指标。
我经常使用 SQL Server 分析器来检查冗余或性能不佳的查询。
但是是否有一个事件(在巨大的列表中)允许您记录将数据从数据库传输到应用程序所需的总时间?
对于返回比应用程序所需数据多得多的数据的查询,这将是一个非常好的指标。
一旦数据离开 SQL Server,它就会受制于您的硬件(NIC 和网络延迟)。
您通常会从事物的客户端进行分析。
使用 SQL Profiler 观察查询执行的读取次数。这是一个很好的指标。使用的查询'SELECT *'
通常不能使用覆盖索引,因此请查找书签查找。
在我看来,您想要识别返回大型结果集的查询。再深入一点,您真正想要做的是确定哪些查询消耗的数据量最大。这可以从逻辑读取和物理读取的角度来看。
为了在报告中查看此信息,您可以使用免费提供的Performance Dashboard Reports或使用 SQL Server DMV。
例如,以下查询取自 Glenn Berry 的优秀SQL Server 性能博客:
/* 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;