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

Время чтения - 1 мин.Дата публикации 02.08.2022 (обновлено 21.05.2026)

Как быстро найти «тормозное» место в скрипте

Бывает, скрипт выполняется слишком долго. И нужно понять — а где именно он тормозит?

Первый вариант — смотрим план запроса. Это классика.

Второй вариант — расставляем метки времени прямо в коде. Проще и нагляднее, чем кажется. Вот о нём и поговорим.

Создаём вспомогательную функцию

Нам понадобится функция, которая выводит время с момента запуска. Вот она:

Create or ALTER FUNCTION [dbo].[as_sec]
(
    @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 3', @t1)

Запускаем — и видим в выводе что-то вроде:

Сразу видно: вот этот запрос отъел больше всего времени. Остальные — мелочь.

Такой подход спасает, когда план запроса не даёт полной картины. Например, если тормозит не сам SELECT, а цикл или временная таблица.

Ещё удобно добавить метки внутри цикла — чтобы понять, на какой итерации всё встаёт колом.

Коротко о главном

  • Создаёшь функцию для замера времени.
  • Ставишь метки в ключевых точках скрипта.
  • Смотришь вывод — и сразу видишь проблемное место.

Никакой магии. Просто рабочий инструмент, который я сам использую постоянно.

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

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

Как запустить SQL сценарий сразу на нескольких БД

Индексы SQL Server. Поиск дубликатов

Запрос для получения SQL всех индексов для таблиц базы данных SQL Server

Как перестроить все индексы на базе SQL Server

Как разрезать строку на части в SQL по некоторому символу

Конвертация из строки в таблицу в SQL Server

Выполнение прямого запроса к URL из SQL

SQL Server Как установить у таблицы описание (MS Description)

Как получить текущего юзера БД

Как хранить в 1 поле таблицы БД значения разных типов?

Генерация MD5 в SQL Server

Как привести телефон в нормализованный вид

Дополнительный заработок для разработчиков на T-SQL

Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML.
Falcon Space - платформа для создания сайтов с личными кабинетами
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Запрос расчета стоимости веб-проекта на базе Falcon Space
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie, Яндекс Метрику. Используя сайт, вы соглашаетесь с правилами сайта. См. Правила конфиденциальности и Правила использования сайта OK