Подтвердить что ты не робот

Как найти время выполнения хранимых процедур в SQL Server?

У меня есть 10 хранимых процедур: SP1, SP2,....., SP10 Эти хранимые процедуры делают некоторые вещи. Мне нужно выполнить следующие процедуры следующим образом: ВЫПОЛНИТЬ SP1; ВЫПОЛНИТЬ SP2; ... ВЫПОЛНИТЬ SP10;

Когда SQL-сервер заканчивает выполнение этих процедур, он дает десять строк, показывающих изменения строк, вызванные всеми этими хранимыми процедурами. Что я хочу сделать, так это то, что после выполнения всех хранимых процедур SQL Server также дает в окне вывода время выполнения для каждой хранимой процедуры. Я могу сделать это? Я уверен, что для достижения этой задачи мне нужно изменить хранимые процедуры, но я не знаю, как это сделать... Пожалуйста, помогите мне. Спасибо.

4b9b3361

Ответ 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;

Просто попробуйте.