1

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

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

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

4

2 回答 2

2

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

您通常会从事物的客户端进行分析。

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

于 2010-09-22T14:36:45.860 回答
1

在我看来,您想要识别返回大型结果集的查询。再深入一点,您真正想要做的是确定哪些查询消耗的数据量最大。这可以从逻辑读取和物理读取的角度来看。

为了在报告中查看此信息,您可以使用免费提供的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;
于 2010-09-22T14:42:48.313 回答