Как замерить время выполнения sql запроса

Иногда требуется понять какая часть в большом скрипте начинает проседать по скорости выполения. Первый вариант - это посмотреть план запроса.

Второй вариант - расставить в скрипте метки времени. Этот вариант и рассмотрим здесь. 

Создаем функцию: 

Create or ALTER FUNCTION [dbo].[as_sec] -- для вывода в print сколько секунд прошло
(
    @text as nvarchar(max), 
	@start datetime
)
RETURNS varchar(max)
AS
BEGIN
	DECLARE @res as nvarchar(max)= 
		cast(cast(DATEDIFF(millisecond,@start,getdate())/1000.0 as decimal(18,2)) as nvarchar) + ' sec - ' + @text 	
	RETURN @res
END

Используем функцию: 

DECLARE @t1 DATETIME = Getdate();
print [dbo].[as_sec] ('start', @t1)
select top 400 * from as_trace
print [dbo].[as_sec] ('after select 1', @t1)

select top 1000 * from as_trace
print [dbo].[as_sec] ('after select 2', @t1)

select top 20 * from as_trace
print [dbo].[as_sec] ('after select 2', @t1)

И получаем такой результат: 

Таким образом наглядно видно, где возникает основная проблема по времени выполнения скрипта. 

Насколько полезной была статья?

Что еще посмотреть по SQL Server

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Получить оценку проекта
Создайте концепцию проекта на основе нашего шаблона и получите оценку проекта в виде КП.
Демо-сайт решений
Базисные решения, которые можно гибко адаптировать под себя: менять внешний вид, бизнес-логику и даже структуру базы данных.
Сайт использует Cookie. Правила конфиденциальности OK