Gurus, I am very new to XQuery. Trying to figure out how I can make use of extended events to monitor long running queries in my system.I know, I am not thinking straight and pretty sure there must be a better way of doing this. So, I am here to seek your help. Please help. Below are the XML and SQL Code that I started. Basically, my ultimate goal is to get eventname, timestamp, dataname, data value, data type name, action name, action value in the same select result set. Please help.[code="xml"]<RingBufferTarget truncated="0" processingTime="0" totalEventsProcessed="77" eventCount="77" droppedCount="0" memoryUsed="227166"> <event name="sql_statement_starting" package="sqlserver" timestamp="2013-02-19T02:55:08.072Z"> <data name="state"> <type name="statement_starting_state" package="sqlserver" /> <value>0</value> <text>Normal</text> </data> <data name="line_number"> <type name="int32" package="package0" /> <value>1</value> </data> <data name="offset"> <type name="int32" package="package0" /> <value>0</value> </data> <data name="offset_end"> <type name="int32" package="package0" /> <value>-1</value> </data> <data name="statement"> <type name="unicode_string" package="package0" /> <value>USE [master]</value> </data> <action name="username" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>LEGALZOOM\jvkondapalli</value> </action> <action name="tsql_stack" package="sqlserver"> <type name="xml" package="package0" /> <value> <frames> <frame level="1" handle="0x010001005307591E009CA8D90200000000000000000000000000000000000000000000000000000000000000" line="1" offsetStart="0" offsetEnd="-1" /> </frames> </value> </action> <action name="tsql_frame" package="sqlserver"> <type name="xml" package="package0" /> <value> <frame level="0" handle="0x010001005307591E009CA8D90200000000000000000000000000000000000000000000000000000000000000" line="1" offsetStart="0" offsetEnd="-1" /> </value> </action> <action name="transaction_sequence" package="sqlserver"> <type name="uint64" package="package0" /> <value>0</value> </action> <action name="transaction_id" package="sqlserver"> <type name="int64" package="package0" /> <value>0</value> </action> <action name="sql_text" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>USE [master]</value> </action> <action name="session_resource_group_id" package="sqlserver"> <type name="uint32" package="package0" /> <value>2</value> </action> <action name="session_nt_username" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>LEGALZOOM\jvkondapalli</value> </action> <action name="session_id" package="sqlserver"> <type name="uint16" package="package0" /> <value>55</value> </action> <action name="server_instance_name" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>GIT3JVKONDA</value> </action> <action name="query_plan_hash" package="sqlserver"> <type name="uint64" package="package0" /> <value>0</value> </action> <action name="query_hash" package="sqlserver"> <type name="uint64" package="package0" /> <value>0</value> </action> <action name="plan_handle" package="sqlserver"> <type name="binary_data" package="package0" /> <value>060001005307591e40bdaad90200000001000000000000000000000000000000000000000000000000000000</value> </action> <action name="is_system" package="sqlserver"> <type name="boolean" package="package0" /> <value>false</value> </action> <action name="database_name" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>master</value> </action> <action name="database_id" package="sqlserver"> <type name="uint16" package="package0" /> <value>1</value> </action> <action name="client_hostname" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>GIT3JVKONDA</value> </action> <action name="client_app_name" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>Microsoft SQL Server Management Studio</value> </action> <action name="task_time" package="sqlos"> <type name="uint64" package="package0" /> <value>15969513</value> </action> <action name="task_elapsed_quantum" package="sqlos"> <type name="uint64" package="package0" /> <value>0</value> </action> <action name="task_address" package="sqlos"> <type name="ptr" package="package0" /> <value>0x00000002e4013868</value> </action> <action name="scheduler_id" package="sqlos"> <type name="uint32" package="package0" /> <value>0</value> </action> <action name="scheduler_address" package="sqlos"> <type name="ptr" package="package0" /> <value>0x00000002e4140040</value> </action> <action name="cpu_id" package="sqlos"> <type name="uint32" package="package0" /> <value>0</value> </action> <action name="last_error" package="package0"> <type name="uint32" package="package0" /> <value>0</value> </action> <action name="event_sequence" package="package0"> <type name="uint64" package="package0" /> <value>1</value> </action> <action name="collect_system_time" package="package0"> <type name="filetime" package="package0" /> <value>2013-02-19T02:55:08.072Z</value> </action> <action name="collect_cpu_cycle_time" package="package0"> <type name="cpu_cycle" package="package0" /> <value>978307646018484</value> </action> </event> <event name="sql_statement_starting" package="sqlserver" timestamp="2013-02-19T02:55:14.686Z"> <data name="state"> <type name="statement_starting_state" package="sqlserver" /> <value>0</value> <text>Normal</text> </data> <data name="line_number"> <type name="int32" package="package0" /> <value>1</value> </data> <data name="offset"> <type name="int32" package="package0" /> <value>0</value> </data> <data name="offset_end"> <type name="int32" package="package0" /> <value>-1</value> </data> <data name="statement"> <type name="unicode_string" package="package0" /> <value>SELECTdtb.name AS [Name],dtb.database_id AS [ID]FROMmaster.sys.databases AS dtbORDER BY[Name] ASC</value> </data> <action name="username" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>LEGALZOOM\jvkondapalli</value> </action> <action name="tsql_stack" package="sqlserver"> <type name="xml" package="package0" /> <value> <frames> <frame level="1" handle="0x02000000C382AC2696F6952BF2E6CE3813C6B794735D856C0000000000000000000000000000000000000000" line="1" offsetStart="0" offsetEnd="-1" /> </frames> </value> </action> <action name="tsql_frame" package="sqlserver"> <type name="xml" package="package0" /> <value> <frame level="0" handle="0x02000000C382AC2696F6952BF2E6CE3813C6B794735D856C0000000000000000000000000000000000000000" line="1" offsetStart="0" offsetEnd="-1" /> </value> </action> <action name="transaction_sequence" package="sqlserver"> <type name="uint64" package="package0" /> <value>0</value> </action> <action name="transaction_id" package="sqlserver"> <type name="int64" package="package0" /> <value>0</value> </action> <action name="sql_text" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>SELECTdtb.name AS [Name],dtb.database_id AS [ID]FROMmaster.sys.databases AS dtbORDER BY[Name] ASC</value> </action> <action name="session_resource_group_id" package="sqlserver"> <type name="uint32" package="package0" /> <value>2</value> </action> <action name="session_nt_username" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>LEGALZOOM\jvkondapalli</value> </action> <action name="session_id" package="sqlserver"> <type name="uint16" package="package0" /> <value>57</value> </action> <action name="server_instance_name" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>GIT3JVKONDA</value> </action> <action name="query_plan_hash" package="sqlserver"> <type name="uint64" package="package0" /> <value>9240582280910057056</value> </action> <action name="query_hash" package="sqlserver"> <type name="uint64" package="package0" /> <value>2744306676576674402</value> </action> <action name="plan_handle" package="sqlserver"> <type name="binary_data" package="package0" /> <value>06000100c382ac2630d31cd80200000001000000000000000000000000000000000000000000000000000000</value> </action> <action name="is_system" package="sqlserver"> <type name="boolean" package="package0" /> <value>false</value> </action> <action name="database_name" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>master</value> </action> <action name="database_id" package="sqlserver"> <type name="uint16" package="package0" /> <value>1</value> </action> <action name="client_hostname" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>GIT3JVKONDA</value> </action> <action name="client_app_name" package="sqlserver"> <type name="unicode_string" package="package0" /> <value>Microsoft SQL Server Management Studio - Transact-SQL IntelliSense</value> </action> <action name="task_time" package="sqlos"> <type name="uint64" package="package0" /> <value>2697572</value> </action> <action name="task_elapsed_quantum" package="sqlos"> <type name="uint64" package="package0" /> <value>0</value> </action> <action name="task_address" package="sqlos"> <type name="ptr" package="package0" /> <value>0x00000002e401d498</value> </action> <action name="scheduler_id" package="sqlos"> <type name="uint32" package="package0" /> <value>1</value> </action> <action name="scheduler_address" package="sqlos"> <type name="ptr" package="package0" /> <value>0x00000002e4160040</value> </action> <action name="cpu_id" package="sqlos"> <type name="uint32" package="package0" /> <value>1</value> </action> <action name="last_error" package="package0"> <type name="uint32" package="package0" /> <value>0</value> </action> <action name="event_sequence" package="package0"> <type name="uint64" package="package0" /> <value>2</value> </action> <action name="collect_system_time" package="package0"> <type name="filetime" package="package0" /> <value>2013-02-19T02:55:14.686Z</value> </action> <action name="collect_cpu_cycle_time" package="package0"> <type name="cpu_cycle" package="package0" /> <value>978324800911629</value> </action> </event> </RingBufferTarget>[/code][code="sql"]-- Idea is to check How many events are there in the .xel file. -- Iterate through the event to grab what I want. -- When I look at my half completed code, makes me feel like, -- I am not using set theory here. I hate using loops when set theory can be applied.DECLARE @xmlTable TABLE (XMLDATA XML)INSERT INTO @xmlTableSELECT CAST(dt.target_data AS XML)FROM sys.dm_xe_session_targets dt JOIN sys.dm_xe_sessions ds ON ds.Address = dt.event_session_address JOIN sys.server_event_sessions ss ON ds.Name = ss.NameWHERE dt.target_name = 'ring_buffer' AND ds.Name = 'EE_LongRunningQueries'DECLARE @EventData TABLE (ID INT IDENTITY(1,1) ,Eventname VARCHAR(MAX), RecordTime DATETIME)INSERT INTO @EventDataSELECT d.x.value('(@name)[1]', 'VARCHAR(MAX)') AS EventName , d.x.value('(@timestamp)[1]', 'DATETIME') AS RecordTimeFROM @xmlTable CROSS APPLY XMLdata.nodes('//RingBufferTarget/event') AS d ( x )DECLARE @EventCount INT , @LogID INT , @TimeStamp DATETIME SELECT @EventCount = COUNT(*) FROM @EventDataWHILE (@EventCount >0)BEGIN SELECT TOP 1 @LogID = ID, @TimeStamp = RecordTime FROM @EventData -- select the count of the nodes in the current event -- run a while loop to get the data inserted to a table -- you might have to use the count of nodes to acheive this -- decrement the EventCount variableEND[/code]
↧