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

Вводная

Представьте что у вас гигантская хранимая процедура 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 запросов MS SQL. Медленно работают запросы SELECT

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

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

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

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