Регистрация времени передачи данных в SQL Server Profiler - PullRequest
1 голос
/ 22 сентября 2010

Я довольно часто использовал профилировщик SQL Server для проверки избыточных или плохо выполняющихся запросов.

Но есть ли событие (среди гигантского списка), которое позволяет регистрировать общее время, необходимое для передачи данных из базы данных в приложение?

Это был бы очень хороший показатель для запросов, которые возвращают намного больше данных, чем необходимо в приложении.

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

Как только данные покидают SQL Server, они зависят от вашего оборудования (сетевых адаптеров и задержки в сети).

Обычно вы пишете это со стороны клиента.

Используйте SQL Profiler для наблюдения за количеством операций чтения, выполненных запросами. Это хороший показатель. Запросы, использующие 'SELECT *', обычно не могут использовать индекс покрытия, поэтому ищите в закладках.

1 голос
/ 22 сентября 2010

Мне кажется, что вы хотите идентифицировать запросы, которые возвращают большие наборы результатов.Если вы поймете это на более глубоком уровне, то вы действительно хотите определить, какие запросы потребляют наибольшее количество данных.Это можно рассматривать как с точки зрения логического чтения, так и физического чтения.

Для просмотра этой информации в отчете вы можете использовать свободно доступные Отчеты панели мониторинга производительности или использовать SQLDMV сервера.

Например, Гленн Берри: 10000 *

/* 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;
взято из превосходного блога по производительности SQL Server : *1010*
...