Медленный 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. Оптимизация быстродействия SQL Server
SQL Server. Работа с индексами через запросы SQL
Где ставить индексы SQL Server
Оптимизация SQL запросов, план запроса в SQL Server
Решение проблем с большим кешем запросов SQL Server
Инструмент для анализа производительности запросов SQL Server Query Store
SQL Server Как найти запросы с проблемами (warning) в плане выполнения запроса (SQL Plan)
Анализ статистики по индексам в базе данных SQL Server
Ищем партнеров-разработчиков на T-SQL
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта