SQL Server Profiler 2005: как измерить время выполнения оператора вставки с помощью триггера? - PullRequest
2 голосов
/ 09 декабря 2010

Я хочу измерить время выполнения (используя, по-моему, продолжительность из SQL Server Profiler) оператора вставки, в котором вместо триггера вставки.Как измерить полное время этого оператора, включая время запуска?

1 Ответ

5 голосов
/ 09 декабря 2010

Время выполнения (продолжительность), которое вы видите в профилировщике SQL-сервера для запроса, - это время, которое потребовалось для выполнения этого запроса , включая оценку любых триггеров или других ограничений .

Поскольку триггерыпредназначены для использования в качестве альтернативного способа проверки целостности данных, оператор SQL не считается выполненным до тех пор, пока не завершены какие-либо триггеры.

Обновление: Обзор некоторых часто используемыхСобытия профилировщика SQL Server:

  • SQL: BatchCompleted Происходит, когда пакет сервера SQL (группа операторов) завершил выполнение - длительность - это общее время выполненияпакет.

  • SQL: StmtCompleted Происходит, когда оператор SQL, выполняемый как часть пакета, завершает выполнение - снова продолжительность - это время выполнения этого отдельного оператора.

  • SP: Завершено Происходит, когда хранимая процедура завершила выполнение - показанная продолжительностьвремя завершения хранимой процедуры.

  • SP: StmtCompleted Происходит при завершении оператора SQL, выполняемого как часть хранимой процедуры.

Пакет - это набор операторов SQL, разделенных оператором GO, однако, чтобы понять вышесказанное, вы также должны знать, что все команды SQL-сервера выполняются в контексте пакета *.

Кроме того, каждое из вышеперечисленных событий также имеет соответствующее событие Starting - SP:Starting, SQL:BatchStarting, SQL:StmtStarting и SP:StmtCompleted.Они не перечисляют длительности (поскольку мы еще не знаем длительность, потому что она еще не завершена, однако помогают показать, когда начинается запись длительности).

Чтобы лучше понять взаимосвязь между этими событиями, я рекомендуючто вы экспериментируете с получением некоторых следов простых примеров (из SQL Server Management Studio), например:

SELECT * FROM SomeTable
GO

SELECT * FROM SomeTable
SELECT * FROM OtherTable
GO

SELECT * FROM SomeTable
exec SomeProc
GO

Как вы должны видеть, для каждого из 3 приведенных выше примеров вы всегда получаете SQL:BatchStarting и SQL:BatchCompleted, другие типы событий, тем не менее, предоставляют более подробную информацию о выполнении отдельных команд.

По этой причине я, как правило, чаще всего использую событие SQL:BatchCompleted, однако, если в операторе вы пытаетесьмера выполняется как часть большего пакета (или хранимой процедуры), тогда вам может пригодиться один из других классов событий.

См. Категория событий TSQL (MSDN) для получения дополнительной информации.для различных событий профилирования SQL Server - их много!

Наконец, если вы выполняете этот коммандерd из студии SQL Server Management помните, что самый простой способ записать время выполнения - использовать функцию статистики на стороне клиента:

alt text

(*) Я почти уверен, что все выполняется как часть пакета, хотя мне не удалось найти никаких доказательств в Интернете, чтобы подтвердить это.

...