Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_trace_ и хранимые процедуры  [new]
Win-Win.Sys
Member

Откуда:
Сообщений: 6
Привет, знатоки.

Продолжаю бороться за оптимизацию своего кода.
Недавно попробовал использовать трассировку

DECLARE @id INT

EXEC sys.sp_trace_create @id OUTPUT, 2, N'c:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Log\MyTrace'

-- RPC:Completed
EXEC sys.sp_trace_setevent @id, 10, 1, 1
EXEC sys.sp_trace_setevent @id, 10, 10, 1
EXEC sys.sp_trace_setevent @id, 10, 6, 1
EXEC sys.sp_trace_setevent @id, 10, 11, 1
EXEC sys.sp_trace_setevent @id, 10, 12, 1
EXEC sys.sp_trace_setevent @id, 10, 13, 1
EXEC sys.sp_trace_setevent @id, 10, 14, 1
EXEC sys.sp_trace_setevent @id, 10, 15, 1
EXEC sys.sp_trace_setevent @id, 10, 16, 1
EXEC sys.sp_trace_setevent @id, 10, 17, 1
EXEC sys.sp_trace_setevent @id, 10, 18, 1
EXEC sys.sp_trace_setevent @id, 10, 48, 1

-- SQL:BatchCompleted
EXEC sys.sp_trace_setevent @id, 12, 1, 1
EXEC sys.sp_trace_setevent @id, 12, 11, 1
EXEC sys.sp_trace_setevent @id, 12, 6, 1
EXEC sys.sp_trace_setevent @id, 12, 10, 1
EXEC sys.sp_trace_setevent @id, 12, 12, 1
EXEC sys.sp_trace_setevent @id, 12, 13, 1
EXEC sys.sp_trace_setevent @id, 12, 14, 1
EXEC sys.sp_trace_setevent @id, 12, 15, 1
EXEC sys.sp_trace_setevent @id, 12, 16, 1
EXEC sys.sp_trace_setevent @id, 12, 17, 1
EXEC sys.sp_trace_setevent @id, 12, 18, 1
EXEC sys.sp_trace_setevent @id, 12, 35, 1
EXEC sys.sp_trace_setevent @id, 12, 48, 1

/*Устанавливаем трассировку по значению поля DatabaseName*/
EXEC sys.sp_trace_setfilter @id, 35, 0, 0, N'ServiceBroker_MY'
EXEC sys.sp_trace_setfilter @id, 35, 1, 0, N'R_Main'

EXEC sys.sp_trace_setstatus @id, 1 -- start


После запуска трассировки я запускаю на выполнение хранимую процедуру
USE [R_Main]
GO

DECLARE @RC int

-- TODO: Set parameter values here.

EXECUTE @RC = [dbo].[sp_Execute] 
GO


Далее жду окончания работы процедуры и запускаю скрипт, который показывает результаты трассировки.
SELECT SPID
	 , DatabaseName
     , TextData
     , ApplicationName
     , CPU
     , Duration = Duration / 1000.
     , Reads
     , Writes
     , EndTime
FROM (
    SELECT TOP(1) [path]
    FROM sys.traces
    WHERE [path] LIKE N'c:\Program Files\Microsoft SQL Server\MSSQL14.SQL2017\MSSQL\Log\MyTrace%'
) t
CROSS APPLY sys.fn_trace_gettable(t.[path], DEFAULT)


В результате выполнения скрипта, я вижу только лишь вызов процедуры и значения CPU, Duration, Reads, Writes для всей процедуры целиком.
USE [R_Main]
GO

DECLARE @RC int

-- TODO: Set parameter values here.

EXECUTE @RC = [dbo].[sp_Execute] 
GO


А как же SELECT-ы, UPDATE-ы и т.д., из самой хранимой процедуры [dbo].[sp_Execute]?

Как можно вывести в трассу все операторы из которых состоит хранимая процедура [dbo].[sp_Execute]

Подскажите, пожалуйста.

P.S. Так же в SSMS запустил такой скрипт:
select top 1000 from Games

select top 1000 from Players

select top 1000 from Ratings


В итоге в трассе вижу не 3 строки для каждого SELECT, а одна строка с тремя SELECT и общими значениями CPU, Duration, Reads, Writes для всех трех SELECT

Спасибо.

Сообщение было отредактировано: 14 ноя 19, 23:30
14 ноя 19, 23:24    [22016660]     Ответить | Цитировать Сообщить модератору
 Re: sp_trace_ и хранимые процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30751
Win-Win.Sys
А как же SELECT-ы, UPDATE-ы и т.д., из самой хранимой процедуры [dbo].[sp_Execute]?
Так вы же заказали собирать RPC:Completed и SQL:BatchCompleted.
Это то, что посылается клиентом серверу.
Что бы получать события изнутри процедур и батчей, нужно добавить SP:StmtCompleted и SQL:StmtCompleted
15 ноя 19, 00:39    [22016679]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить