Eu uso o evento rpc_completed para capturar sprocs executados. Também devo visualizar a instrução e os parâmetros passados usando a seguinte maneira:
clique com o botão direito do mouse em evento estendido -> Assistir a dados ao vivo e, finalmente, veja instrução + parâmetros
No entanto quero ver os dados capturados em formato de tabela, mas não consegui implementar. Quando executo a consulta abaixo, ele mostra a instrução sem parâmetros. Como posso ver os parâmetros no formulário da tabela? Precisa de suas sugestões.
IF OBJECT_ID('tempdb..#capture_waits_data') IS NOT NULL
DROP TABLE #capture_waits_data
SELECT CAST(target_data as xml) AS targetdata
INTO #capture_waits_data
FROM sys.dm_xe_session_targets xet
JOIN sys.dm_xe_sessions xes
ON xes.address = xet.event_session_address
WHERE xes.name = 'LongRunningQueries'
AND xet.target_name = 'ring_buffer';
--*/
/**********************************************************/
SELECT
CONVERT(datetime2,SWITCHOFFSET(CONVERT(datetimeoffset,xed.event_data.value('(@timestamp)[1]', 'datetime2')),DATENAME(TzOffset, SYSDATETIMEOFFSET()))) AS datetime_local,
xed.event_data.value('(@name)[1]', 'varchar(50)') AS event_type,
xed.event_data.value('(data[@name="statement"]/value)[1]', 'varchar(max)') AS statement,
xed.event_data.value('(data[@name="duration"]/value)[1]', 'bigint')/1000 AS duration_ms,
xed.event_data.value('(data[@name="physical_reads"]/value)[1]', 'bigint') AS physical_reads,
xed.event_data.value('(data[@name="logical_reads"]/value)[1]', 'bigint') AS logical_reads
FROM #capture_waits_data
CROSS APPLY targetdata.nodes('//RingBufferTarget/event') AS xed (event_data)
WHERE 1=1 and xed.event_data.value('(action[@name="username"]/value)[1]', 'varchar(255)') <> 'NT SERVICE\SQLSERVERAGENT'
Aqui está o evento estendido usado real:
CREATE EVENT SESSION [LongRunningQueries] ON SERVER
ADD EVENT sqlserver.rpc_completed(
ACTION(package0.collect_system_time,sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.session_id,sqlserver.username)
WHERE ([duration]>(4000000) AND [sqlserver].[database_name]='mydb')),
ADD EVENT sqlserver.sql_statement_completed(
ACTION(package0.collect_system_time,sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.session_id,sqlserver.username)
WHERE ([duration]>(4000000) AND [sqlserver].[database_name]='mydb'))
ADD TARGET package0.ring_buffer(SET max_events_limit=(0),max_memory=(102400))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=5 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
Se os procedimentos estiverem sendo chamados, você deverá ver absolutamente os valores dos parâmetros na coluna 'instrução'. Eu tenho um post no blog que demonstra exatamente esse problema. Não há literalmente nada mágico para fazer isso acontecer. É apenas uma parte da declaração.
Agora, para fazer a declaração aparecer na grade no Live Data Viewer, você pode clicar com o botão direito do mouse no painel de detalhes e selecionar a opção de menu para mostrar a declaração ou selecionar o seletor de coluna na barra de ferramentas. Aqui está um vídeo mostrando como isso funciona.