Вводная Представьте что у вас гигантская хранимая процедура MS SQL, и она в целом медленно работает. Как найти медленное место в этой процедуре? Решение Для поиска проблемных мест можно воспользоваться SQL планом в Management ...

Медленный sql. Как найти, что вызывает замедление в хранимой процедуре MS SQL

Время чтения - менее одной минутыДата публикации 29.05.2025

Вводная

Представьте что у вас гигантская хранимая процедура MS SQL, и она в целом медленно работает. 

Как найти медленное место в этой процедуре? 

Решение

Для поиска проблемных мест можно воспользоваться SQL планом в Management Studio. Однако его не совсем удобно использовать, когда выполняется 100+ запросов в процедуре и получается громадное дерево, которое не очень удобно использовать. 

В этом случае можно использовать метод простановки меток по коду и отслеживание сколько времени займет выполнение от прошлой до этой метки.

В хранимой процедуре (или большом блоке sql кода) проставляем такие метки:

declare @dt datetime = getdate()

exec [dbo].as_traceCode @name ='s1', @dt=@dt output
... 
exec [dbo].as_traceCode @name ='s2', @dt=@dt output
...
exec [dbo].as_traceCode @name ='s3', @dt=@dt output

При запуке получим такие принты: 

Это позволит понять где у нас медленные участки кода, провести их оптимизацию и посмотреть новые значения с учетом правок. 

Сама процедура as_traceCode: 

CREATE OR ALTER PROCEDURE [dbo].as_traceCode
	@name nvarchar(256),
	@dt datetime output,
	@updateTime bit = 1
AS
BEGIN
	print  @name + '=' + cast(DATEDIFF(ms,@dt,GETDATE()) as nvarchar)+'ms'
	if(@updateTime=1) set @dt = getdate()
END

Если параметр updateTime, то время не будет обнуляться между метками и просто будет показывать время от начала выполнения кода, а не от прошлой метки.

P.S. Лучше создать копию процедуры, чтобы можно ее было "мучать" как угодно и отслеживать как меняются метрики времени при удалении или изменении частей копии процедуры. 

 

 

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

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

Способы оптимизации SQL запросов с примерами

SQL Server сильно грузит процессор. Проблемы CPU у процесса SQLServer. Оптимизация запросов SQL по CPU

Как найти медленные проблемные запросы SQL Server. Оптимизация быстродействия SQL Server

SQL Server. Работа с индексами через запросы SQL

Где ставить индексы SQL Server

Оптимизация SQL запросов, план запроса в SQL Server

Решение проблем с большим кешем запросов SQL Server

Инструмент для анализа производительности запросов SQL Server Query Store

SQL Server Как найти запросы с проблемами (warning) в плане выполнения запроса (SQL Plan)

Анализ статистики по индексам в базе данных SQL Server

Определение какая база данных создает нагрузку на CPU

Оптимизация SQL - медленная конвертация таблицы в строку

Ищем партнеров-разработчиков на T-SQL и PL/pgSQL

Прямая работа с заказчиками как ИП или самозанятый. Нужно знать только SQL и HTML

Falcon Space - платформа для создания сайтов с личными кабинетами

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