Иногда нам приходится иметь дело с длительной хранимой процедурой, чтобы заставить их работать быстрее. Каков наилучший способ быстро определить, какая часть кода является самой медленной? Для меня я просто добавляю инструкцию PRINT
в хранимую процедуру и запускаю ее, тогда я могу найти, какая часть будет медленной. Я хочу знать, есть ли альтернативные методы?Для длительных хранимых процедур, как быстро идентифицировать наиболее трудоемкую часть?
ответ
Для меня почти то же, что и вы, просто вставьте время начала и окончания каждой части процедуры в таблицу журналов, а затем проверьте записи. печать просто поможет вам проверить 1 раз. таблица журналов может помочь вам узнать, есть ли у процедуры какие-то проблемы.
Выполните процедуру с «планом выполнения». Это поможет вам определить, какая часть процедуры занимает больше времени. Также он предложит вам, если вам потребуется добавить какие-либо индексы.
Перед выполнением сценария в «SQL Server Management Studio» выберите «Включить план фактического выполнения» или используйте Ctrl + M, а затем запустите вызов сценария/процедуры.
В окне «План выполнения» (рядом с вкладкой результатов) вы можете подробно просмотреть и проанализировать его.
, глядя на процентное соотношение фактического плана выполнения? –
Concur с Raffaello. В частности:
--initialise
DELETE FROM DB..Perf_Log;
DECLARE @lastTime datetime
set @lastTime=getdate()
/* do some shit */
--add this block after each big block of functionality that you want to test
insert into DB..Perf_Log values ('did some shit 1',datediff("MILLISECOND",@lastTime,getdate()))
set @lastTime=getdate()
Таким образом, вы можете видеть, что вызывает проблемы мгновенно, даже если хранимая процедура требует времени для запуска. Это полезно, даже если хранимая передача попадает в ловушку, потому что вы можете видеть, что было последним успешным. Удачи.
Используйте SQL Profiler для подключения и наблюдения за каждым утверждением и его синхронизацией.
Использовать события, начинающиеся с SP: наблюдать, но знать, что профилировщик может иметь собственное влияние на производительность.
https://dba.stackexchange.com/questions/29284/how-to-profile-stored-procedures
Этот вопрос уже был задан вопрос о 'dba.stackexchange.com': [Как Профиль хранимых процедур] (http://dba.stackexchange.com/q/29284/65699) –