Как найти время выполнения хранимых процедур в SQL Server?
У меня есть 10 хранимых процедур:
SP1, SP2,....., SP10
Эти хранимые процедуры делают некоторые вещи.
Мне нужно выполнить следующие процедуры следующим образом:
ВЫПОЛНИТЬ SP1;
ВЫПОЛНИТЬ SP2;
...
ВЫПОЛНИТЬ SP10;
Когда SQL-сервер заканчивает выполнение этих процедур, он дает десять строк, показывающих изменения строк, вызванные всеми этими хранимыми процедурами.
Что я хочу сделать, так это то, что после выполнения всех хранимых процедур SQL Server также дает в окне вывода время выполнения для каждой хранимой процедуры.
Я могу сделать это? Я уверен, что для достижения этой задачи мне нужно изменить хранимые процедуры, но я не знаю, как это сделать...
Пожалуйста, помогите мне.
Спасибо.
Ответы
Ответ 1
Вы можете использовать Sql Server Profiler для этой цели, он предоставляет много полезной информации по каждому выполненному запросу и хранимой процедуре.
MSDN: столбцы данных SQL Profiler
SQL Profiler отображает время выполнения для каждого события
Другим простым способом:
- DECLARE 2 переменные datetime: начало/конец
- SET start = GETDATE()
- EXEC SP_NAME
- SET end = GETDATE()
- Время выполнения - разница между окончанием и запуском
Ответ 2
Предполагая, что студия управления или какая-либо другая среда с выводом вы можете;
SET STATISTICS TIME ON
EXEC SP1
EXEC SP2
...
SET STATISTICS TIME OFF
Ответ 3
declare @start datetime = getdate()
-- your SQL statements
exec dbo.MyStoredProcedure
declare @executionTimeInMilliseconds int = datediff(ms, @start, getdate())
Ответ 4
Есть способы сделать это с помощью таких инструментов, как профилировщик Sql Server, но простой способ - запустить каждый процесс, окруженный строкой, чтобы напечатать время:
print convert(varchar, getdate(), 21)
EXEC PROC SP1
print convert(varchar, getdate(), 21)
Ответ 5
время захвата и отображения
используйте два параметра типа datetime
и установите один, используя getdate()
перед началом tsql
в хранимой процедуре
и установите второй с помощью getdate()
после tsql
и, наконец, используйте функцию datediff
, чтобы получить разницу
Ответ 6
Вам не нужно изменять код SPs вообще. Следующий запрос дает вам некоторые статистические данные о времени выполнения SP.
SELECT
DB_NAME(database_id) [database],
OBJECT_NAME(object_id) [stored_procedure],
cached_time,
last_execution_time,
execution_count,
total_elapsed_time/execution_count [avg_elapsed_time],
[type_desc]
FROM sys.dm_exec_procedure_stats
--WHERE OBJECT_NAME(object_id) IN ('SP1','SP2','SP3','SP4','SP5')
ORDER BY avg_elapsed_time desc;
Просто попробуйте.