Hi experts,
I want to see the exeuction plan(plan_handle) of rpc_completed and I write T-SQL like below. However, it always return zero in plan_handle. What's wrong?
<event name="rpc_completed" package="sqlserver" timestamp="2013-12-12T02:22:16.158Z"><data name="cpu_time"><value>58999000</value></data><data name="duration"><value>59124861</value></data><data name="physical_reads"><value>0</value></data><data name="logical_reads"><value>587549</value></data><data name="writes"><value>0</value></data><data name="result"><value>0</value><text>OK</text></data><data name="row_count"><value>41972</value></data><data name="connection_reset_option"><value>0</value><text>None</text></data><data name="object_name"><value>sp_prepexec</value></data><data name="statement"><value>declare @p1 int set @p1=31981 exec sp_prepexec @p1 output,N'@P1 nvarchar(3),@P2 nvarchar(3),@P3 nvarchar(30),@P4 nvarchar(4),@P5 nvarchar(4),@P6 nvarchar(4),@P7 nvarchar(4),@P8 nvarchar(4),@P9 nvarchar(4),@P10 nvarchar(4),@P11 nvarchar(4),@P12 nvarchar(2),@P13 nvarchar(8),@P14 nvarchar(8)',N'SELECT T_00 ."MANDT" AS c ,T_00 ."MATNR" AS c ,T_00 ."LIEFERANT" AS c ,T_00 ."WERK" AS c ,T_00 ."QSSYSFAM" AS c ,T_01 ."BUKRS" AS c FROM "QINF" T_00 INNER JOIN "T001K" T_01 ON T_01 ."MANDT" = @P1 AND T_00 ."WERK" = T_01 ."BWKEY" WHERE T_00 ."MANDT" = @P2 AND T_00 ."LIEFERANT" LIKE @P3 AND T_00 ."WERK" IN ( @P4 , @P5 , @P6 , @P7 , @P8 , @P9 , @P10 ) AND T_01 ."BUKRS" = @P11 AND T_00 ."SPERRFKT" <> @P12 AND ( T_00 ."ERSTELLDAT" >= @P13 OR T_00 ."AENDERDAT" >= @P14 ) /* R3:ZQRRM069:131 T:QINF */ ',N'218',N'218',N'_______',N'CS20',N'CS31',N'CS41',N'CS50',N'CS51',N'CS52',N'CS32',N'9200',N'99',N'20131211',N'20131211' select @p1</value></data><data name="data_stream"><value /></data><data name="output_parameters"><value /></data><action name="database_id" package="sqlserver"><value>5</value></action><action name="plan_handle" package="sqlserver"><value>0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000</value></action><action name="session_id" package="sqlserver"><value>1878</value></action><action name="sql_text" package="sqlserver"><value>(@P1 nvarchar(3),@P2 nvarchar(3),@P3 nvarchar(30),@P4 nvarchar(4),@P5 nvarchar(4),@P6 nvarchar(4),@P7 nvarchar(4),@P8 nvarchar(4),@P9 nvarchar(4),@P10 nvarchar(4),@P11 nvarchar(4),@P12 nvarchar(2),@P13 nvarchar(8),@P14 nvarchar(8))SELECT T_00 ."MANDT" AS c ,T_00 ."MATNR" AS c ,T_00 ."LIEFERANT" AS c ,T_00 ."WERK" AS c ,T_00 ."QSSYSFAM" AS c ,T_01 ."BUKRS" AS c FROM "QINF" T_00 INNER JOIN "T001K" T_01 ON T_01 ."MANDT" = @P1 AND T_00 ."WERK" = T_01 ."BWKEY" WHERE T_00 ."MANDT" = @P2 AND T_00 ."LIEFERANT" LIKE @P3 AND T_00 ."WERK" IN ( @P4 , @P5 , @P6 , @P7 , @P8 , @P9 , @P10 ) AND T_01 ."BUKRS" = @P11 AND T_00 ."SPERRFKT" <> @P12 AND ( T_00 ."ERSTELLDAT" >= @P13 OR T_00 ."AENDERDAT" >= @P14 ) /* R3:ZQRRM069:131 T:QINF */</value></action></event>
My create event:
IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='RPC_Expensive_Queries')
DROP EVENT SESSION [RPC_Expensive_Queries] ON SERVER;
GO
CREATE EVENT SESSION [RPC_Expensive_Queries] ON SERVER
ADD EVENT sqlserver.rpc_completed(
ACTION (sqlserver.database_id,
sqlserver.plan_handle,
sqlserver.session_id,
sqlserver.sql_text)
WHERE cpu_time > 100000000 /*total ms of CPU time, eight 0, 00000000*/
OR duration > 100000000 /* eight 0*/
OR logical_reads > 10000000 /* seven 0 */
OR physical_reads > 1000000 /* six 0 */
OR writes > 100000 ) /*five 0 */
ADD TARGET package0.ring_buffer(SET max_memory=2048),
ADD TARGET package0.asynchronous_bucketizer(
SET filtering_event_name='sqlserver.rpc_completed',
source='sqlserver.sql_text'),
ADD TARGET package0.asynchronous_file_target
(SET FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\RPC_Expensive_Queries.xel',
METADATAFILE = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\RPC_Expensive_Queries.xem')
WITH (MAX_MEMORY = 4096KB,
EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS,
MAX_DISPATCH_LATENCY = 10 SECONDS,
MAX_EVENT_SIZE = 0KB,
MEMORY_PARTITION_MODE = NONE,
TRACK_CAUSALITY = OFF,
STARTUP_STATE = OFF)
GO
ALTER EVENT SESSION [RPC_Expensive_Queries] ON SERVER STATE = START
GOextract xml
SELECT
data.value (
'(/event[@name=''rpc_completed'']/@timestamp)[1]',
'DATETIME') AS [Time],
data.value ('(/event/data[@name=''cpu_time'']/value)[1]', 'BIGINT') AS [CPU (ms)],
data.value ('(/event/data[@name=''duration'']/value)[1]', 'BIGINT') AS [duration (ms)],
-- CONVERT (FLOAT, data.value (
-- '(/event/data[@name=''cpu_time'']/value)[1]', 'BIGINT')) / 1000000 AS [CPU (s)],
-- CONVERT (FLOAT, data.value (
-- '(/event/data[@name=''duration'']/value)[1]', 'BIGINT')) / 1000000 AS [Duration (s)],
data.value('(/event/data[@name=''logical_reads'']/value)[1]','bigint') LogicalReads,
data.value('(/event/data[@name=''physical_reads'']/value)[1]','bigint') PhysicalReads,
data.value('(./data[@name="writes"]/value)[1]', 'bigint') as writes,
data.value ('(/event/action[@name=''sql_text'']/value)[1]','VARCHAR(MAX)') AS [SQL Text],
data.value ('(/event/data[@name=''statement'']/value)[1]','VARCHAR(MAX)') AS [Statement],
CAST(data.value('(event/action[@name="plan_handle"]/value)[1]', 'varchar(max)') AS XML) as plan_handle
FROM
(SELECT CONVERT (XML, event_data) AS data
FROM sys.fn_xe_file_target_read_file
('C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\RPC_Expensive_Queries*.xel',
'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Log\RPC_Expensive_Queries*.xem', null, null)
) entries
ORDER BY [Time] DESC;
GO