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

Время чтения - 1 мин.Дата публикации 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

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

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

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

Способы оптимизации 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)

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

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