SergSuper
Дата: 03.01.2001 17:23:55
Я делаю примерно так:
declare @d datetime
select @d=GETDATE()
-- некий запрос
select datediff(ss, @d, GETDATE())
Как-то извне наверное можно через ODS, как это делает profiler, но тут я помочь не могу.
Дед Маздай
Дата: 09.01.2001 16:55:00
Для этого предназначена команда SET STATISTICS TIME { ON | OFF }.
Пример:
dbcc dropcleanbuffers --чистим странички в буфере для чистоты эксперимента
dbcc freeproccache --то же самое с процедурным кэшем
set statistics time on --включаем вывод длительности каждого этапа
select * from orders --меряем запрос
set statistics time off
Вывод:
SQL Server parse and compile time:
CPU time = 40 ms, elapsed time = 418 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
(830 row(s) affected)
SQL Server Execution Times:
CPU time = 20 ms, elapsed time = 649 ms.
Пояснения:
Elapsed Time есть разность системного времени между началом выполнения запроса и тем моментом, когда пакет DONE был успешно отослан клиентскому приложению. СPU Time есть умноженное на миллисекунды количество тиков процессора, которые он занимался запросом. Если обработка запроса уложилась в промежуток между тиками, будет показано нулевое время. CPU Time является более реальной мерой, поскольку Elapsed Time включает ожидание свободных циклов процессора, простои из-за того, что нужные данные оказались блокированными, повторы при сбоях в передаче результатов на клиента и пр. Elapsed Time может сильно превышать CPU Time, если на машине одновременно с SQL Server крутится несколько тяжелых приложений, много одновременных пользователей, сетка тормозит и т.д.