<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'SQL Server 2008', 'Extended Events', and 'SQL Server Denali'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=SQL+Server+2008,Extended+Events,SQL+Server+Denali&amp;orTags=0</link><description>Search results matching tags 'SQL Server 2008', 'Extended Events', and 'SQL Server Denali'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Parsing the sqlserver.sql_text Action in Extended Events by Offsets</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2011/01/30/parsing-the-sqlserver-sql-text-action-in-extended-events-by-offsets.aspx</link><pubDate>Mon, 31 Jan 2011 02:05:43 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:33039</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;A couple of weeks back I received an email from a member of the community who was reading the XEvent a Day blog series and had a couple of interesting questions about Extended Events.&amp;#160; This person had created an Event Session that captured the sqlserver.sql_statement_completed and sqlserver.sql_statement_starting Events and wanted to know how to do a correlation between the related Events so that the offset information from the starting Event could be used to find the statement of the completed Event to know the specific statement and its reads, cpu and write information from the sqlserver.sql_statement_completed Event.&amp;#160; Confused yet?&amp;#160; Since it doesn’t really read well what the intent was, lets look at the columns that are output by both of these Events, and it will make more sense.&amp;#160; I am going to break this post into two sections, SQL Server 2008 and SQL Server Denali, because there are significant differences between the two with regard to Extended Events and specifically these two events.&lt;/p&gt;  &lt;h2&gt;SQL Server 2008&lt;/h2&gt;  &lt;p&gt;In SQL Server 2008, the sqlserver.sql_statement_starting Event has the following output columns:&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;select &lt;/span&gt;name&lt;span style="color:gray;"&gt;, &lt;/span&gt;column_id&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name
&lt;/span&gt;&lt;span style="color:blue;"&gt;from &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns
&lt;/span&gt;&lt;span style="color:blue;"&gt;where &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'sql_statement_starting'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;and &lt;/span&gt;column_type &lt;span style="color:gray;"&gt;&amp;lt;&amp;gt; &lt;/span&gt;&lt;span style="color:red;"&gt;'readonly'&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image3_40F188BD.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image3_thumb_4A2DC3FE.png" width="311" height="161" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The sqlserver.sql_statement_completed Event has the following output columns:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;select &lt;/span&gt;name&lt;span style="color:gray;"&gt;, &lt;/span&gt;column_id&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name
&lt;/span&gt;&lt;span style="color:blue;"&gt;from &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns
&lt;/span&gt;&lt;span style="color:blue;"&gt;where &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'sql_statement_completed'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;and &lt;/span&gt;column_type &lt;span style="color:gray;"&gt;&amp;lt;&amp;gt; &lt;/span&gt;&lt;span style="color:red;"&gt;'readonly'&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_51B9336B.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_125B7FDB.png" width="282" height="158" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;/blockquote&gt;

&lt;p&gt;The intent as I understood it was to use the offset and offset_end from the sqlserver.sql_statement_starting Event with the information in the sqlserver.sql_statement_completed Event and I could only assume the sqlserver.sql_text Action.&amp;#160; When I got the email I replied back to use the sqlserver.tsql_stack Action to get the offset information with the sqlserver.sql_statement_completed Event and use that to parse the statement from the sqlserver.sql_text Action.&amp;#160; I didn’t have time to play with it at the moment, but I promised to write a blog post showing how to do it later that day.&amp;#160; &lt;/p&gt;

&lt;p&gt;When I got a free minute where I could write a demo to blog about for this I ran into some problems with the results that I got from parsing the sql_text data that was returned by Extended Events.&amp;#160; To show this, lets create an Event Session and run a test multi-statement batch so that we have to some sample Event Data to do processing on.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;IF &lt;/span&gt;&lt;span style="color:gray;"&gt;EXISTS (&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;1 &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;DROP EVENT SESSION &lt;/span&gt;SQLStmtEvents &lt;span style="color:blue;"&gt;ON SERVER
GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Create our Event Session for current Session_ID
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@SqlCmd &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;) = &lt;/span&gt;&lt;span style="color:red;"&gt;N'
CREATE EVENT SESSION SQLStmtEvents
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(    ACTION (sqlserver.sql_text, sqlserver.tsql_stack)
    WHERE (sqlserver.session_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;@@SPID &lt;/span&gt;&lt;span style="color:blue;"&gt;AS NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')    ),
ADD EVENT sqlserver.sql_statement_starting
(    ACTION (sqlserver.sql_text, sqlserver.tsql_stack)
    WHERE (sqlserver.session_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;@@SPID &lt;/span&gt;&lt;span style="color:blue;"&gt;AS NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')    )
ADD target package0.ring_buffer
WITH (MAX_DISPATCH_LATENCY=5SECONDS, TRACK_CAUSALITY=ON)'&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@SqlCmd&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Start the Event Session
&lt;/span&gt;&lt;span style="color:blue;"&gt;ALTER EVENT SESSION &lt;/span&gt;SQLStmtEvents
&lt;span style="color:blue;"&gt;ON SERVER
STATE&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;START&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Run a multi-statement Batch
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* 
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;objects

&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* 
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM master&lt;/span&gt;&lt;span style="color:gray;"&gt;..&lt;/span&gt;spt_values
&lt;span style="color:blue;"&gt;WHERE type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'P'

&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;*
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;TABLES
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;With the Event Session created I did quick check to validate that the offset information held in the tsql_stack matched the offset information returned by the sql_statement_starting Event.&amp;#160; The tsql_stack returns an XML document that is similar to the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;frame &lt;/span&gt;&lt;span style="color:red;"&gt;level&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;1&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;handle&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;0x020000004765D81E643DBDA1E90A8F634B78C042FF805374&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;line&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;2&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;offsetStart&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;64&lt;/span&gt;&amp;quot; &lt;span style="color:red;"&gt;offsetEnd&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;124&lt;/span&gt;&amp;quot; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;After validating the offsets matched, I wrote out the parser for the Event Data and sql_text as follows:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Extract the Event information from the Event Session 
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;timestamp&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;cpu&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;duration&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;reads&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;writes&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;state&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;offset&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;offset&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;offset_end&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;offset_end&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;nest_level&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@level)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;nest_level&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;,    
                (&lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;offset&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;))/&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, 
                ((&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE &lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;offset_end&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) 
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATALENGTH&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;) 
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;offset_end&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) 
                  &lt;/span&gt;&lt;span style="color:blue;"&gt;END &lt;/span&gt;&lt;span style="color:gray;"&gt;- &lt;/span&gt;&lt;span style="color:magenta;"&gt;ISNULL&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;offset&lt;span style="color:gray;"&gt;, &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)))/&lt;/span&gt;2&lt;span style="color:gray;"&gt;) + &lt;/span&gt;1&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;statement_text_Xevents&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_sequence&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;activity_id
&lt;span style="color:blue;"&gt;FROM
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, 
            &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;GETUTCDATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(), &lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@timestamp)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'datetime2'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;session_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[session_id]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;cpu&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[cpu]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[duration]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;reads&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[reads]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;writes&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[writes]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;state&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[state]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;offset&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[offset]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;offset_end&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[offset_end]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;nest_level&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[nest_level]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;tsql_stack&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[tsql_stack]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;sql_text&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[sql_text]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;source_database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[source_database_id]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;object_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[object_id]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;object_type&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[object_type]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;1&lt;span style="color:gray;"&gt;, &lt;/span&gt;36&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS uniqueidentifier&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;activity_id&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;38&lt;span style="color:gray;"&gt;, &lt;/span&gt;10&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS int&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;event_sequence
    &lt;span style="color:blue;"&gt;FROM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(   &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;.&lt;/span&gt;query&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data 
        &lt;span style="color:blue;"&gt;FROM 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Cast the target_data to XML 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;target_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;TargetData 
            &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_session_targets &lt;/span&gt;st 
            &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;s 
                &lt;span style="color:blue;"&gt;ON &lt;/span&gt;s&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;address &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_address 
            &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents' 
              &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;target_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ring_buffer'
        &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Data 
        &lt;span style="color:green;"&gt;-- Split out the Event Nodes 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;TargetData&lt;span style="color:gray;"&gt;.&lt;/span&gt;nodes &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'RingBufferTarget/event'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;XEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;)   
    ) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;tab &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;results&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;If you run these two examples, you will notice immediately that something is not right with the statement_text_XEvents data, it didn’t parse out correctly.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_4BDE8FD2.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_2C9BE8FF.png" width="644" height="91" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I also validated that this same behavior exists in SQL Server Denali CTP1.&amp;#160; To look at this further and determine where exactly the problem might be, I used the plan_handle from the tsql_stack to get the sql text from sys.dm_exec_sql_text() and then offset parse that in the same manner to validate that the offset information is not the problem.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;offset&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;offset_end&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@level)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;nest_level&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;,    
                (&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)/&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, 
                ((&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATALENGTH&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;) 
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
                  &lt;/span&gt;&lt;span style="color:blue;"&gt;END &lt;/span&gt;&lt;span style="color:gray;"&gt;- &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;))/&lt;/span&gt;2&lt;span style="color:gray;"&gt;) + &lt;/span&gt;1&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;statement_text_Xevents&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;text&lt;/span&gt;&lt;span style="color:gray;"&gt;, (&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)/&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, 
        ((&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
          &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATALENGTH&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;text&lt;/span&gt;&lt;span style="color:gray;"&gt;)
         &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
         &lt;/span&gt;&lt;span style="color:blue;"&gt;END &lt;/span&gt;&lt;span style="color:gray;"&gt;- &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;))/&lt;/span&gt;2&lt;span style="color:gray;"&gt;) + &lt;/span&gt;1&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;statement_text_from_cache&lt;span style="color:gray;"&gt;, 
         &lt;/span&gt;sql_text
&lt;span style="color:blue;"&gt;FROM
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;tsql_stack&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[tsql_stack]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;sql_text&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[sql_text]
    &lt;span style="color:blue;"&gt;FROM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(   &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;.&lt;/span&gt;query&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data 
        &lt;span style="color:blue;"&gt;FROM 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Cast the target_data to XML 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;target_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;TargetData 
            &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_session_targets &lt;/span&gt;st 
            &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;s 
                &lt;span style="color:blue;"&gt;ON &lt;/span&gt;s&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;address &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_address 
            &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents' 
              &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;target_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ring_buffer'
        &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Data 
        &lt;span style="color:green;"&gt;-- Split out the Event Nodes 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;TargetData&lt;span style="color:gray;"&gt;.&lt;/span&gt;nodes &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'RingBufferTarget/event'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;XEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;)   
    ) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;tab &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;results
&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_exec_sql_text&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'xs:hexBinary(substring((/frame/@handle)[1], 3))'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varbinary(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;st&lt;/pre&gt;

  &lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/p&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_7BE8E153.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_2EB8E7C8.png" width="644" height="94" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The information from the cache is correct, so there has to be something different about the sql_text Action output.&amp;#160; To figure out what that was, I changed my script slightly so that it would parse out each character in the text from cache and the sql_text Action to see what was different and where:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Extract the Event information from the Event Session 
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;sv&lt;span style="color:gray;"&gt;.&lt;/span&gt;number &lt;span style="color:blue;"&gt;AS &lt;/span&gt;Position&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;ASCII&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;text&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;sv&lt;span style="color:gray;"&gt;.&lt;/span&gt;number&lt;span style="color:gray;"&gt;+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, &lt;/span&gt;1&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;cache_text&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;ASCII&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;, &lt;/span&gt;sv&lt;span style="color:gray;"&gt;.&lt;/span&gt;number&lt;span style="color:gray;"&gt;+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, &lt;/span&gt;1&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;sql_text
&lt;span style="color:blue;"&gt;FROM
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;tsql_stack&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[tsql_stack]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;sql_text&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[sql_text]
    &lt;span style="color:blue;"&gt;FROM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(   &lt;/span&gt;&lt;span style="color:green;"&gt;-- Get only one of the events this time
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT TOP &lt;/span&gt;1 XEvent&lt;span style="color:gray;"&gt;.&lt;/span&gt;query&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data 
        &lt;span style="color:blue;"&gt;FROM 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Cast the target_data to XML 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;target_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;TargetData 
            &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_session_targets &lt;/span&gt;st 
            &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;s 
                &lt;span style="color:blue;"&gt;ON &lt;/span&gt;s&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;address &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_address 
            &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents' 
              &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;target_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ring_buffer'
        &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Data 
        &lt;span style="color:green;"&gt;-- Split out the Event Nodes 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;TargetData&lt;span style="color:gray;"&gt;.&lt;/span&gt;nodes &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'RingBufferTarget/event'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;XEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;)   
    ) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;tab &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;results
&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_exec_sql_text&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'xs:hexBinary(substring((/frame/@handle)[1], 3))'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varbinary(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;st
&lt;span style="color:gray;"&gt;CROSS JOIN &lt;/span&gt;&lt;span style="color:blue;"&gt;master&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;spt_values &lt;span style="color:blue;"&gt;AS &lt;/span&gt;sv
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;sv&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'P'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;sv&lt;span style="color:gray;"&gt;.&lt;/span&gt;number &lt;span style="color:gray;"&gt;&amp;lt;= &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATALENGTH&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;text&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_222B3AAC.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_29B6AA19.png" width="213" height="238" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;What I found was that the carriage returns are missing from the sql_text Action in Extended Events.&amp;#160; We can work around that by doing a REPLACE(sql_text, CHAR(10), CHAR(13)+CHAR(10)) operation to return the carriage returns to the output.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Extract the Event information from the Event Session 
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;timestamp&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;cpu&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;duration&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;reads&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;writes&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;state&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;,    
                (&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)/&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, 
                ((&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATALENGTH&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;) 
                    &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) 
                  &lt;/span&gt;&lt;span style="color:blue;"&gt;END &lt;/span&gt;&lt;span style="color:gray;"&gt;- &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;))/&lt;/span&gt;2&lt;span style="color:gray;"&gt;) + &lt;/span&gt;1&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;statement_text_Xevents&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;text&lt;/span&gt;&lt;span style="color:gray;"&gt;, (&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)/&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;, 
        ((&lt;/span&gt;&lt;span style="color:blue;"&gt;CASE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
          &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:gray;"&gt;-&lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATALENGTH&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;text&lt;/span&gt;&lt;span style="color:gray;"&gt;)
         &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetEnd)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
         &lt;/span&gt;&lt;span style="color:blue;"&gt;END &lt;/span&gt;&lt;span style="color:gray;"&gt;- &lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/frame/@offsetStart)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;))/&lt;/span&gt;2&lt;span style="color:gray;"&gt;) + &lt;/span&gt;1&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;statement_text_from_cache&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;sql_text&lt;span style="color:gray;"&gt;,    
    &lt;/span&gt;event_sequence&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;activity_id
&lt;span style="color:blue;"&gt;FROM
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, 
            &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;GETUTCDATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(), &lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@timestamp)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'datetime2'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;session_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[session_id]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;cpu&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[cpu]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[duration]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;reads&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[reads]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;writes&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[writes]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;state&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[state]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;offset&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[offset]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;offset_end&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[offset_end]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;nest_level&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[nest_level]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;tsql_stack&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[tsql_stack]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;REPLACE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;sql_text&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;13&lt;span style="color:gray;"&gt;)+&lt;/span&gt;&lt;span style="color:blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[sql_text]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;source_database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[source_database_id]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;object_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[object_id]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;object_type&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[object_type]&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;1&lt;span style="color:gray;"&gt;, &lt;/span&gt;36&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS uniqueidentifier&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;activity_id&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;38&lt;span style="color:gray;"&gt;, &lt;/span&gt;10&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS int&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;event_sequence
    &lt;span style="color:blue;"&gt;FROM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(   &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;.&lt;/span&gt;query&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data 
        &lt;span style="color:blue;"&gt;FROM 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Cast the target_data to XML 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;target_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;TargetData 
            &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_session_targets &lt;/span&gt;st 
            &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;s 
                &lt;span style="color:blue;"&gt;ON &lt;/span&gt;s&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;address &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_address 
            &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents' 
              &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;target_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ring_buffer'
        &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Data 
        &lt;span style="color:green;"&gt;-- Split out the Event Nodes 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;TargetData&lt;span style="color:gray;"&gt;.&lt;/span&gt;nodes &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'RingBufferTarget/event'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;XEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;)   
    ) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;tab &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;results
&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_exec_sql_text&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tsql_stack&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'xs:hexBinary(substring((/frame/@handle)[1], 3))'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varbinary(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;st&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_0354C6CE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_24B46C6A.png" width="644" height="86" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I filed this as a bug on Connect titled &lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/639811/extended-events-sqlserver-sql-text-action-is-not-offset-parseable?wa=wsignin1.0#" target="_blank"&gt;Extended Events sqlserver.sql_text Action is not Offset Parseable&lt;/a&gt; after trading a couple of emails with Mike Wachal about this, and he has already replied to the connect item stating that they are looking at the difference between the two operations in the engine.&amp;#160; &lt;/p&gt;

&lt;h2&gt;SQL Server Denali&lt;/h2&gt;

&lt;p&gt;I was hesitant to even bother filing this as a bug because in SQL Server Denali CTP1, none of this is necessary to collect the statement, since the statement exists as a customizable column on the Events. &lt;/p&gt;

&lt;p&gt;In Denali CTP1, the sql_statement_starting Event has the following columns:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;select &lt;/span&gt;&lt;span style="color:teal;"&gt;name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;column_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;column_type
&lt;/span&gt;&lt;span style="color:blue;"&gt;from &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns
&lt;/span&gt;&lt;span style="color:blue;"&gt;where &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'sql_statement_starting'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;and &lt;/span&gt;&lt;span style="color:teal;"&gt;column_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;&amp;gt; &lt;/span&gt;&lt;span style="color:red;"&gt;'readonly'
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_5B059479.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_34A3B12E.png" width="415" height="144" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The sql_statement_completed Event has the following columns:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;select &lt;/span&gt;&lt;span style="color:teal;"&gt;name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;column_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;column_type
&lt;/span&gt;&lt;span style="color:blue;"&gt;from &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns
&lt;/span&gt;&lt;span style="color:blue;"&gt;where &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'sql_statement_completed'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;and &lt;/span&gt;&lt;span style="color:teal;"&gt;column_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt;&amp;gt; &lt;/span&gt;&lt;span style="color:red;"&gt;'readonly'
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_273D9E28.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_15CD3D50.png" width="367" height="255" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you compare the columns output by the sql_statement_completed Event in Denali CTP1, you will notice that it has significantly more columns in its base column payload, as well as having the statement as a customizable column.&amp;#160; In Denali CTP1, the only thing necessary to get the specific TSQL statement that is executing is to turn collection of the customizable column statement on using the collect_statement column.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;IF &lt;/span&gt;&lt;span style="color:gray;"&gt;EXISTS (&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;1 &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:teal;"&gt;name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;DROP EVENT SESSION &lt;/span&gt;&lt;span style="color:teal;"&gt;SQLStmtEvents &lt;/span&gt;&lt;span style="color:blue;"&gt;ON SERVER
GO
DECLARE &lt;/span&gt;&lt;span style="color:teal;"&gt;@SqlCmd &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;) = &lt;/span&gt;&lt;span style="color:red;"&gt;N'
CREATE EVENT SESSION SQLStmtEvents
ON SERVER
ADD EVENT sqlserver.sql_statement_completed
(    SET collect_statement=1
    ACTION (sqlserver.sql_text, sqlserver.tsql_stack)
    WHERE (sqlserver.session_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;@@SPID &lt;/span&gt;&lt;span style="color:blue;"&gt;AS NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')    ),
ADD EVENT sqlserver.sql_statement_starting
(    SET collect_statement=1
    ACTION (sqlserver.sql_text, sqlserver.tsql_stack)
    WHERE (sqlserver.session_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;@@SPID &lt;/span&gt;&lt;span style="color:blue;"&gt;AS NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')    )
ADD target package0.ring_buffer
WITH (MAX_DISPATCH_LATENCY=5SECONDS, TRACK_CAUSALITY=ON)'&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;@SqlCmd&lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
ALTER EVENT SESSION &lt;/span&gt;&lt;span style="color:teal;"&gt;SQLStmtEvents
&lt;/span&gt;&lt;span style="color:blue;"&gt;ON SERVER
STATE&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:teal;"&gt;START&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* 
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;objects

&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* 
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM master&lt;/span&gt;&lt;span style="color:gray;"&gt;..&lt;/span&gt;&lt;span style="color:teal;"&gt;spt_values
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'P'

&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;*
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;TABLES
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;With this turned on, all we have to do is query the Event Data and parse out the statement column to know the specific statement that was executing.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Extract the Event information from the Event Session 
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;event_name&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;timestamp&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;cpu&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;duration&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;reads&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;writes&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;state&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;statement&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;activity_id&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;event_sequence
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;event_name&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;hh&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
            &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;hh&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;GETUTCDATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(), &lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@timestamp)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'datetime2'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[timestamp]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;cpu&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[cpu]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[duration]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;reads&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[reads]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;writes&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[writes]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;state&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[state]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;statement&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;[statement]&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;1&lt;span style="color:gray;"&gt;, &lt;/span&gt;36&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS uniqueidentifier&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:teal;"&gt;activity_id&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;38&lt;span style="color:gray;"&gt;, &lt;/span&gt;10&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS int&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;&lt;span style="color:teal;"&gt;event_sequence
    &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(   &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:teal;"&gt;XEvent&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;query&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;event_data 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Cast the target_data to XML 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;target_data &lt;/span&gt;&lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;TargetData 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_session_targets &lt;/span&gt;&lt;span style="color:teal;"&gt;st 
            &lt;/span&gt;&lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;&lt;span style="color:teal;"&gt;s 
                &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:teal;"&gt;s&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;address &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;st&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;event_session_address 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:teal;"&gt;name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'SQLStmtEvents' 
              &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;target_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ring_buffer'
        &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;Data 
        &lt;/span&gt;&lt;span style="color:green;"&gt;-- Split out the Event Nodes 
        &lt;/span&gt;&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;&lt;span style="color:teal;"&gt;TargetData&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;nodes &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'RingBufferTarget/event'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;XEventData &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;XEvent&lt;/span&gt;&lt;span style="color:gray;"&gt;)   
    ) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;tab &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;event_data&lt;/span&gt;&lt;span style="color:gray;"&gt;)
) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;results
&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="code"&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_2477E935.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_5747EFA9.png" width="644" height="102" /&gt;&lt;/a&gt; &lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;The new statement column in Denali CTP 1 eliminates the need to do offset parsing of the sql_text Action entirely.&amp;#160; Knowing that, it really became clear to me that the addition of the offset information in the Event’s base column payload was really useless, and for that I submitted a different Connect feedback item &lt;a href="https://connect.microsoft.com/SQLServer/feedback/details/639818/extended-events-remove-data-from-event-output-that-is-available-by-actions"&gt;Extended Events - Remove data from Event output that is available by Actions&lt;/a&gt;.&amp;#160; You might ask why does this matter?&amp;#160; It matters because for everytime the Event fires, this information is included in the Event Data for the Event.&amp;#160; Since Event Data is materialized as XML, this becomes needless bloat of the Event Data output for the Event and it really is useless information.&amp;#160; If you really wanted to collect the offset information, you could add the tsql_stack Action to the Events to collect it, so there is no reason for the Event to carry this information by default.&lt;/p&gt;

&lt;p&gt;So there you have it.&amp;#160; How to parse the sqlserver.sql_text Action in SQL Server 2008 using offset information to isolate the actual executing statement from a multi-statement batch using a work around, and why its not necessary to do this in SQL Server Denali going forward. &lt;/p&gt;</description></item><item><title>An XEvent a Day (31 of 31) – Event Session DDL Events</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/31/an-xevent-a-day-31-of-31-event-session-ddl-events.aspx</link><pubDate>Fri, 31 Dec 2010 19:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:32198</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;To close out this month’s series on Extended Events we’ll look at the DDL Events for the Event Session DDL operations, and how those can be used to track changes to Event Sessions and determine all of the possible outputs that could exist from an Extended Event Session.&amp;#160; One of my least favorite quirks about Extended Events is that there is no way to determine the Events and Actions that may exist inside a Target, except to parse all of the the captured data.&amp;#160; Information about the Event Session does exist in the &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/04/an-xevent-a-day-4-31-querying-the-session-definition-and-active-session-dmv-s.aspx"&gt;Session Definition Catalog Views and Active Session DMV’s&lt;/a&gt;, but as you change an Event Sessions Events and Actions while it is running, the information in these change as well, so it is possible that a Target has Events and Actions that are not returned by the current information available about the Event Session.&amp;#160; This is where the DDL Events for the Event Session DDL operations can be useful, if the appropriate framework is deployed.&lt;/p&gt;  &lt;p&gt;The DDL Events for Extended Events are not currently documented in the Books Online.&amp;#160; I only recently learned about them from Mike Wachal during a discussion about what I thought was missing from Extended Events.&amp;#160; This is simply an oversight in the documentation, and something that Mike has stated will be fixed, it doesn’t mean that the DDL Events are undocumented and subject to change without notice like other undocumented features of SQL Server.&amp;#160; We can find the DDL Events for Extended Events in the sys.event_notification_event_types.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
    type&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:teal;"&gt;parent_type
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;event_notification_event_types
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name &lt;/span&gt;&lt;span style="color:gray;"&gt;LIKE &lt;/span&gt;&lt;span style="color:red;"&gt;'%SESSION%'
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_2FD260B8.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_0D2E223D.png" width="341" height="101" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These can be used just like any other DDL Event to create a DDL Trigger or Event Notification that takes action when one of the DDL operations occurs.&amp;#160; We can use this to log the DDL to track our changes over time, and we can also use it to create a tracking table of the possible outputs from our Event Session, ensuring that we know what information it may have collected when we parse the Event data from the Targets.&amp;#160; We can also use this information to simplify the generation of our XQuery XPATH statements to parse the data from the Targets with a little extra work.&amp;#160; &lt;/p&gt;

&lt;p&gt;In all of my servers, I have a standard database named sqladmin that I keep DBA related information and objects.&amp;#160; For the examples, I will create this database and use it in all the code.&amp;#160; If you have a different database, the scripts can easily be changed to create the objects in that database.&amp;#160; The first thing we’ll do is create our database, and two tables, one for tracking the DDL operations and the other for tracking all of the possible outputs for our Event Session.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;sqladmin
&lt;span style="color:blue;"&gt;GO
USE &lt;/span&gt;sqladmin
&lt;span style="color:blue;"&gt;GO
CREATE TABLE &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XEvents_DDLOperations
&lt;span style="color:gray;"&gt;( &lt;/span&gt;DDLEventData &lt;span style="color:blue;"&gt;XML&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
  &lt;/span&gt;ChangeDate &lt;span style="color:blue;"&gt;DATETIME DEFAULT&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
  &lt;/span&gt;LoginName &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;DEFAULT&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUSER_SNAME&lt;/span&gt;&lt;span style="color:gray;"&gt;()),
  &lt;/span&gt;ProgramName &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;DEFAULT&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;program_name&lt;/span&gt;&lt;span style="color:gray;"&gt;())
);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
CREATE TABLE &lt;/span&gt;XEvents_SessionOutputs
&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;EventSessionName &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;),
    &lt;/span&gt;EventName &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;),
    &lt;/span&gt;EventID &lt;span style="color:blue;"&gt;INT&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;ColumnID &lt;span style="color:blue;"&gt;INT&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;ColumnName &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;),
    &lt;/span&gt;NodeType &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;),
    &lt;/span&gt;DataType &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;50&lt;span style="color:gray;"&gt;),
    &lt;/span&gt;XMLLocation &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;),
    &lt;/span&gt;TypePrecidence &lt;span style="color:blue;"&gt;INT
&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;The XEvents_SessionOutputs table will have multiple rows for each Event Session defined on the server that track the EventName, the output ColumnName, the NodeType for the data element in the Event XML, the SQL DataType returned by the output, the XMLLocation for where the data of interest exists, and a TypePrecidence value that can be used when multiple Events return the same Data Element with different DataTypes, ensuring that we can pick the most compatible DataType for the output column.&amp;#160; The table also tracks the Event ID in the Event Session for the Event, the Column ID for the output column so that grouping and ordering can be performed during code generation from this table.&lt;/p&gt;

&lt;p&gt;To get the SQL DataType that an output returns, we have to look at the output type_name in the Extended Events metadata for the output column or Action.&amp;#160; To make this easier to do and allow for code reuse, I create a view that maps the type_name in Extended Events to corresponding SQL DataType.&amp;#160; Since Maps can be a type_name in Extended Events, the view queries the sys.dm_xe_map_values DMV and calculates the maximum length of the map_value column for each Map, and then uses the nvarchar datatype and rounds the length up to the nearest power of 10 (ok, it doesn’t actually round but that is the effect of the math operations).&amp;#160; For the actual Event data columns in the base payload, the type_name is transposed to the equivalent SQL DataType that is compatible with XQuery.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE VIEW &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XETypeToSQLType 
&lt;span style="color:blue;"&gt;AS
    SELECT 
        &lt;/span&gt;XETypeName &lt;span style="color:gray;"&gt;= &lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;name&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;SQLTypeName &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar('&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;LEN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;map_value&lt;span style="color:gray;"&gt;))-(&lt;/span&gt;&lt;span style="color:magenta;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;LEN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;map_value&lt;span style="color:gray;"&gt;))%&lt;/span&gt;10&lt;span style="color:gray;"&gt;) + &lt;/span&gt;10 &lt;span style="color:blue;"&gt;AS VARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')'&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;XMLLocation &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'text'&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;TypePrecidence &lt;span style="color:gray;"&gt;= &lt;/span&gt;5
    &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns &lt;/span&gt;oc
    &lt;span style="color:gray;"&gt;LEFT JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_map_values &lt;/span&gt;mv
        &lt;span style="color:blue;"&gt;ON &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;type_package_guid &lt;span style="color:gray;"&gt;= &lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;object_package_guid
            &lt;span style="color:gray;"&gt;AND &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;name
    &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;column_type &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'data'
      &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;name &lt;span style="color:gray;"&gt;IS NOT NULL
    &lt;/span&gt;&lt;span style="color:blue;"&gt;GROUP BY &lt;/span&gt;mv&lt;span style="color:gray;"&gt;.&lt;/span&gt;name
&lt;span style="color:blue;"&gt;UNION &lt;/span&gt;&lt;span style="color:gray;"&gt;ALL
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;XETypeName &lt;span style="color:gray;"&gt;= &lt;/span&gt;o&lt;span style="color:gray;"&gt;.&lt;/span&gt;name&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;SQLTypeName &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE 
                            WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'int8'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int16'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int32'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'uint8'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                                    &lt;/span&gt;&lt;span style="color:red;"&gt;'uint16'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'uint32'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'float32'&lt;/span&gt;&lt;span style="color:gray;"&gt;) 
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;'int'
                            &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'int64'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'uint64'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'float64'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'
                            &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'boolean'
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(10)' &lt;/span&gt;&lt;span style="color:green;"&gt;--true/false returned
                            &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'guid'
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;'uniqueidentifier'
                            &lt;/span&gt;&lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'
                        &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;XMLLocation &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'value'&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;TypePrecidence &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE 
                            WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'int8'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int16'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int32'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'uint8'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                                    &lt;/span&gt;&lt;span style="color:red;"&gt;'uint16'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'uint32'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'float32'&lt;/span&gt;&lt;span style="color:gray;"&gt;) 
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;1
                            &lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'int64'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'uint64'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'float64'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;2
                            &lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'boolean'
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;3 &lt;span style="color:green;"&gt;--true/false returned
                            &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'guid'
                                &lt;/span&gt;&lt;span style="color:blue;"&gt;THEN &lt;/span&gt;3
                            &lt;span style="color:blue;"&gt;ELSE &lt;/span&gt;5
                         &lt;span style="color:blue;"&gt;END
    FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_objects &lt;/span&gt;o
    &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;object_type &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'type'
      &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:magenta;"&gt;TYPE_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;!= &lt;/span&gt;&lt;span style="color:red;"&gt;'null'
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Using this view, we can create another view that queries the Session Definition Catalog Views, to retrieve the output columns for an Event Session in a format that matches our XEvents_SessionOutputs table.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE VIEW &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XESession_OutputsFromDMVs
&lt;span style="color:blue;"&gt;AS
        &lt;/span&gt;&lt;span style="color:green;"&gt;-- Find a list of all the possible output columns
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
            &lt;/span&gt;ses&lt;span style="color:gray;"&gt;.&lt;/span&gt;name &lt;span style="color:blue;"&gt;AS &lt;/span&gt;EventSessionName&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;name &lt;span style="color:blue;"&gt;AS &lt;/span&gt;EventName&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_id &lt;span style="color:blue;"&gt;AS &lt;/span&gt;EventID&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;column_id &lt;span style="color:blue;"&gt;AS &lt;/span&gt;ColumnID&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;name &lt;span style="color:blue;"&gt;AS &lt;/span&gt;ColumnName&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;&lt;span style="color:red;"&gt;'data' &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;NodeType&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;SQLTypeName &lt;span style="color:blue;"&gt;AS &lt;/span&gt;DataType&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;XMLLocation&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;TypePrecidence
        &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;server_event_sessions &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;ses
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;server_event_session_events &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;sese
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;ses&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_id
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_packages &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;p 
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;package &lt;span style="color:gray;"&gt;= &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;name
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;oc 
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;name
                &lt;span style="color:gray;"&gt;AND &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;object_package_guid &lt;span style="color:gray;"&gt;= &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;guid
        &lt;/span&gt;&lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;XETypeToSQLType &lt;span style="color:blue;"&gt;AS &lt;/span&gt;xetst
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;XETypeName
        &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;oc&lt;span style="color:gray;"&gt;.&lt;/span&gt;column_type &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'data'
    &lt;/span&gt;&lt;span style="color:blue;"&gt;UNION
        SELECT 
            &lt;/span&gt;ses&lt;span style="color:gray;"&gt;.&lt;/span&gt;name&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;name&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;sesa&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_id&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;999 &lt;span style="color:blue;"&gt;AS &lt;/span&gt;column_id&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;sesa&lt;span style="color:gray;"&gt;.&lt;/span&gt;name&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;&lt;span style="color:red;"&gt;'action'&lt;/span&gt;&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;SQLTypeName&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;XMLLocation&lt;span style="color:gray;"&gt;,
            &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;TypePrecidence
        &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;server_event_sessions &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;ses
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;server_event_session_events &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;sese
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;ses&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_id
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;server_event_session_actions &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;sesa
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;ses&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;sesa&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_id
                &lt;span style="color:gray;"&gt;AND &lt;/span&gt;sesa&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;sese&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_id
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_packages &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;p
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;sesa&lt;span style="color:gray;"&gt;.&lt;/span&gt;package &lt;span style="color:gray;"&gt;= &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;name
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_objects &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;o
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;guid &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;o&lt;span style="color:gray;"&gt;.&lt;/span&gt;package_guid
                &lt;span style="color:gray;"&gt;AND &lt;/span&gt;sesa&lt;span style="color:gray;"&gt;.&lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;o&lt;span style="color:gray;"&gt;.&lt;/span&gt;name
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;XETypeToSQLType &lt;span style="color:blue;"&gt;AS &lt;/span&gt;xetst
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;o&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;xetst&lt;span style="color:gray;"&gt;.&lt;/span&gt;XETypeName
        &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;o&lt;span style="color:gray;"&gt;.&lt;/span&gt;object_type &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'action'
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;We can then create a Server Level DDL Trigger for the DDL_EVENT_SESSION_EVENTS group that will log the DDL operation to the XEvents_DDLOperations table, and at the same time populate the output information in the XEvents_SessionOutputs table when an Event Session is created, add any new outputs when an Event Session is altered, and delete the Event Session information when an Event Session is dropped.&amp;#160; By adding new outputs when a Event Session is altered, we maintain a record of the original outputs, even if the Event was dropped from the Event Session.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE TRIGGER &lt;/span&gt;XEvents_DDLTrigger
&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:gray;"&gt;ALL &lt;/span&gt;&lt;span style="color:blue;"&gt;SERVER 
FOR &lt;/span&gt;DDL_EVENT_SESSION_EVENTS
&lt;span style="color:blue;"&gt;AS
BEGIN
    SET NOCOUNT ON&lt;/span&gt;&lt;span style="color:gray;"&gt;;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@EventData &lt;span style="color:blue;"&gt;XML &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:magenta;"&gt;EVENTDATA&lt;/span&gt;&lt;span style="color:gray;"&gt;();
    &lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XEvents_DDLOperations &lt;span style="color:gray;"&gt;(&lt;/span&gt;DDLEventData&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@EventData&lt;span style="color:gray;"&gt;);

    &lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@EventType &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;) = &lt;/span&gt;@EventData&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(EVENT_INSTANCE/EventType)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(256)'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@SessionName &lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;256&lt;span style="color:gray;"&gt;) = &lt;/span&gt;@EventData&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(EVENT_INSTANCE/ObjectName)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(256)'&lt;/span&gt;&lt;span style="color:gray;"&gt;)

    &lt;/span&gt;&lt;span style="color:blue;"&gt;IF &lt;/span&gt;@EventType &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'CREATE_EVENT_SESSION'
    &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN
        INSERT INTO &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XEvents_SessionOutputs 
            &lt;span style="color:gray;"&gt;(&lt;/span&gt;EventSessionName&lt;span style="color:gray;"&gt;, &lt;/span&gt;EventName&lt;span style="color:gray;"&gt;, &lt;/span&gt;EventID&lt;span style="color:gray;"&gt;, &lt;/span&gt;ColumnID&lt;span style="color:gray;"&gt;, &lt;/span&gt;ColumnName&lt;span style="color:gray;"&gt;, &lt;/span&gt;NodeType&lt;span style="color:gray;"&gt;,
             &lt;/span&gt;DataType&lt;span style="color:gray;"&gt;, &lt;/span&gt;XMLLocation&lt;span style="color:gray;"&gt;, &lt;/span&gt;TypePrecidence&lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;EventSessionName&lt;span style="color:gray;"&gt;, &lt;/span&gt;EventName&lt;span style="color:gray;"&gt;, &lt;/span&gt;EventID&lt;span style="color:gray;"&gt;, &lt;/span&gt;ColumnID&lt;span style="color:gray;"&gt;, &lt;/span&gt;ColumnName&lt;span style="color:gray;"&gt;, &lt;/span&gt;NodeType&lt;span style="color:gray;"&gt;,
             &lt;/span&gt;DataType&lt;span style="color:gray;"&gt;, &lt;/span&gt;XMLLocation&lt;span style="color:gray;"&gt;, &lt;/span&gt;TypePrecidence
        &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XESession_OutputsFromDMVs
        &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;EventSessionName &lt;span style="color:gray;"&gt;= &lt;/span&gt;@SessionName
    &lt;span style="color:blue;"&gt;END

    IF &lt;/span&gt;@EventType &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ALTER_EVENT_SESSION'
    &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN
        &lt;/span&gt;&lt;span style="color:green;"&gt;-- Add any new outputs to the Table
        &lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XEvents_SessionOutputs
            &lt;span style="color:gray;"&gt;(&lt;/span&gt;EventSessionName&lt;span style="color:gray;"&gt;, &lt;/span&gt;EventName&lt;span style="color:gray;"&gt;, &lt;/span&gt;EventID&lt;span style="color:gray;"&gt;, &lt;/span&gt;ColumnID&lt;span style="color:gray;"&gt;, &lt;/span&gt;ColumnName&lt;span style="color:gray;"&gt;, &lt;/span&gt;NodeType&lt;span style="color:gray;"&gt;,
             &lt;/span&gt;DataType&lt;span style="color:gray;"&gt;, &lt;/span&gt;XMLLocation&lt;span style="color:gray;"&gt;, &lt;/span&gt;TypePrecidence&lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventSessionName&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventName&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventID&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;ColumnID&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;ColumnName&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;NodeType&lt;span style="color:gray;"&gt;,
             &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;DataType&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;XMLLocation&lt;span style="color:gray;"&gt;, &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;TypePrecidence
        &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XESession_OutputsFromDMVs vdmv
        &lt;span style="color:gray;"&gt;LEFT JOIN &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XEvents_SessionOutputs xeso
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventSessionName &lt;span style="color:gray;"&gt;= &lt;/span&gt;xeso&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventSessionName
                &lt;span style="color:gray;"&gt;AND &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventName &lt;span style="color:gray;"&gt;= &lt;/span&gt;xeso&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventName
                &lt;span style="color:gray;"&gt;AND &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;ColumnName &lt;span style="color:gray;"&gt;= &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;ColumnName
        &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;vdmv&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventSessionName &lt;span style="color:gray;"&gt;= &lt;/span&gt;@SessionName
          &lt;span style="color:gray;"&gt;AND &lt;/span&gt;xeso&lt;span style="color:gray;"&gt;.&lt;/span&gt;EventSessionName &lt;span style="color:gray;"&gt;IS NULL
    &lt;/span&gt;&lt;span style="color:blue;"&gt;END

    IF &lt;/span&gt;@EventType &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'DROP_EVENT_SESSION'
    &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN
        &lt;/span&gt;&lt;span style="color:green;"&gt;-- Delete the Output data for the Event Session
        &lt;/span&gt;&lt;span style="color:blue;"&gt;DELETE &lt;/span&gt;sqladmin&lt;span style="color:gray;"&gt;.&lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;XEvents_SessionOutputs
        &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;EventSessionName &lt;span style="color:gray;"&gt;= &lt;/span&gt;@SessionName
    &lt;span style="color:blue;"&gt;END
END
GO
&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;If we recreate the TrackResourceWaits Event Session from yesterday’s post and then query the XEvents_SessionOutputs table, we can see the outputs that we can expect from that Event Session:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;*
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:teal;"&gt;sqladmin&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;dbo&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;XEvents_SessionOutputs
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:teal;"&gt;EventSessionName &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'TrackResourceWaits'

&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_3AF3015D.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_5A35A830.png" width="644" height="195" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Using this information, we can also write a query to generate our XQuery statements for each of the outputs, as well as a column definition stub if we wanted to create a table to hold this information for analysis.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;&lt;span style="color:red;"&gt;'event_data.value(''(event/'&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:teal;"&gt;NodeType&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;'[@name=&amp;quot;'&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnName&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;'&amp;quot;]/'&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:teal;"&gt;XMLLocation&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;')[1]'', '''&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:teal;"&gt;DataType&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;''') AS '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnName&lt;/span&gt;&lt;span style="color:gray;"&gt;)+&lt;/span&gt;&lt;span style="color:red;"&gt;',' &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;XQuery&lt;/span&gt;&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnName&lt;/span&gt;&lt;span style="color:gray;"&gt;)+&lt;/span&gt;&lt;span style="color:red;"&gt;' '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:teal;"&gt;DataType&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;', ' &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnDefinition
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;OVER &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;PARTITION BY &lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnName &lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color:teal;"&gt;TypePrecidence &lt;/span&gt;&lt;span style="color:blue;"&gt;DESC&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;partitionid&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;EventSessionName&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;EventID&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnID&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnName&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;NodeType&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;DataType&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;XMLLocation
    &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:teal;"&gt;sqladmin&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;dbo&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;XEvents_SessionOutputs
&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;tab
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:teal;"&gt;EventSessionName &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'TrackResourceWaits'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;partitionid &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;1
&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color:teal;"&gt;EventID&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;ColumnID&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_7FBF2591.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_0A1049F2.png" width="644" height="215" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The information in the XQuery column can be copied and pasted into our TSQL Script for parsing the Event Data from the ring_buffer, pair_matching, or asynchronous_file_target Targets.&amp;#160; You could also use this as the basis for writing your own Extended Events Target Data code generator, similar to &lt;a href="http://sqlblog.com/blogs/adam_machanic/archive/2010/05/08/extended-events-code-generator-v1-001-a-quick-fix.aspx" target="_blank"&gt;the one that Adam Machanic&lt;/a&gt; created a year ago.&lt;/p&gt;

&lt;p&gt;That’s it for this months series on Extended Events.&amp;#160; You can find links to all of the posts on the round up post from December 1, &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/01/a-xevent-a-day-31-days-of-extended-events.aspx"&gt;An XEvent A Day: 31 days of Extended Events&lt;/a&gt;.&amp;#160; Hopefully its been informative, and you now have a better understanding of how Extended Events can be used inside of SQL Server 2008, 2008R2, and in Denali CTP1.&lt;/p&gt;</description></item><item><title>An XEvent a Day (30 of 31) – Tracking Session and Statement Level Waits</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/30/an-xevent-a-day-30-of-31-tracking-session-and-statement-level-waits.aspx</link><pubDate>Fri, 31 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:32175</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;While attending PASS Summit this year, I got the opportunity to hang out with Brent Ozar (&lt;a href="http://www.brentozar.com/" target="_blank"&gt;Blog&lt;/a&gt;|&lt;a href="http://twitter.com/BrentO" target="_blank"&gt;Twitter&lt;/a&gt;) one afternoon while he did some work for Yanni Robel (&lt;a href="http://sqlscribbles.com/" target="_blank"&gt;Blog&lt;/a&gt;|&lt;a href="http://twitter.com/YanniRobel" target="_blank"&gt;Twitter&lt;/a&gt;).&amp;#160; After looking at the wait stats information, Brent pointed out some potential problem points, and based on that information I pulled up my code for my PASS session the next day on Wait Statistics and Extended Events and made some changes to one of the demo’s so that the Event Session only focused on those potentially problematic waits that had been identified, and sent Brent the DDL so that he could give Extended Events a shot.&amp;#160; Within a few minutes, we were able track down to the statement level in a couple of stored procedures, the causes of those waits, and after some analysis Brent was able to offer some suggestions to Yanni about how to reduce the waits.&lt;/p&gt;  &lt;p&gt;Understanding how SQL Server waits to continue execution can be key to improving performance since time spent waiting is time lost during the execution of a SQL Statement.&amp;#160; I love looking at wait statistics and the chapter that I wrote for &lt;a href="http://www.amazon.com/Professional-Server-2008-Internals-Troubleshooting/dp/0470484284/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1293754853&amp;amp;sr=8-1" target="_blank"&gt;SQL Server 2008 Internals and Troubleshooting&lt;/a&gt; was SQL Server Waits and Extended Events.&amp;#160; Information about wait statistics has been available in SQL Server for a long time, and many of the vendors that develop monitoring applications for SQL Server have polling methods that query sys.dm_os_waiting_tasks or sys.sysprocesses to capture wait information about the tasks that are currently active in the system.&amp;#160; However one of the shortcomings of a polling method is that it misses a lot of the wait information because it is a point in time snapshot only.&amp;#160; If the polling interval is every second, only the active waits that exist at that second are captured, and any waits that occur between the polling interval is missed.&amp;#160; This information is still accumulated in sys.dm_os_wait_stats, but it is impossible to track it back to the statement level from that DMV.&lt;/p&gt;  &lt;p&gt;Extended Events offers us the ability to capture information about waits without missing any of the information.&amp;#160; Already in this series we’ve seen how to use Extended Events with the &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/07/An-XEvent-a-Day-_2800_7-of-31_2900_-_2D00_-Targets-Week-_2D00_-Bucketizers.aspx" target="_blank"&gt;Bucketizer Target&lt;/a&gt; to count the occurrences of waits by type.&amp;#160; This isn’t really a great use of Extended Events since sys.dm_os_wait_stats counts the occurrences of the wait types already, and a differential analysis of the information contained in sys.dm_os_wait_stats can provide this information.&amp;#160; The purpose of that example was to discuss the bug that existed in the RTM release of SQL Server 2008 more than it was to provide a sensible use for the target.&amp;#160; However, if we wanted to break our waits down by database, we could bucket on the database_id, and begin to understand which database had the most waits associated with it, but not by the individual wait type.&amp;#160; To get to that level of information, we need to collect all of the waits and the associated information for them to do further analysis.&lt;/p&gt;  &lt;p&gt;There are two Events in Extended Events associated with wait types; sqlos.wait_info and sqlos.wait_info_external.&amp;#160; Looking at the description of the Events in the Metadata DMV’s we can get an idea of when each Event will fire. &lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;name&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:blue;"&gt;description 
FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_objects
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;LIKE &lt;/span&gt;&lt;span style="color:red;"&gt;'wait_info%'&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_346A9227.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_66EDEF99.png" width="788" height="63" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The sqlos.wait_info_external Event will fire for wait types that begin with PREEMPTIVE_ in the name, and the sqlos.wait_info Event will fire for the other wait types that occur on the server.&amp;#160; Glenn Alan Berry (&lt;a href="http://sqlserverperformance.wordpress.com/" target="_blank"&gt;Blog&lt;/a&gt;|&lt;a href="http://twitter.com/glennalanberry" target="_blank"&gt;Twitter&lt;/a&gt;) has a great script that filters queries sys.dm_os_wait_stats and filters out common waits that are not generally problematic.&amp;#160; You can find his script on his blog post &lt;a href="http://sqlserverperformance.wordpress.com/2010/12/29/updated-sql-2005-and-2008-diagnostic-queries/"&gt;Updated SQL 2005 and 2008 Diagnostic Queries&lt;/a&gt;.&amp;#160; You can use this script to identify the most common waits on a server, and then use that information to build an Event Session that captures the session and statement information for those individual wait types.&amp;#160; In SQL Server 2008, there are 484 wait types listed in sys.dm_os_wait_stats and there are 599 map_value’s for the wait_types Map in sys.dm_xe_map_values.&amp;#160; The reason this is different is that the Map was created from the header file for the wait types and there are padded values that exist in the Map that don’t really correspond to wait types that exist in SQL Server.&amp;#160; However, there are also a couple of Maps for the wait_types that don’t match the wait type in sys.dm_os_wait_stats, the most notable being the ASYNC_NETWORK_IO to NETWORK_IO.&lt;/p&gt;

&lt;p&gt;To build the Event Session, we just need to query sys.dm_map_values for our wait_types and use the map_key's in the Predicate definition of the sqlos.wait_info or sqlos.wait_info_external Event as appropriate.&amp;#160; We can also do the same thing to build a generic Event Session that tracks the most common resource related waits.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;map_key&lt;span style="color:gray;"&gt;, &lt;/span&gt;map_value 
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_map_values
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'wait_types'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;AND ((&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;0 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;22&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- LCK_ waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;31 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;38&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- LATCH_ waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;47 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;54&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- PAGELATCH_ waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;63 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;70&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- PAGEIOLATCH_ waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;96 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;100&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- IO (Disk/Network) waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;107&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;113&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- SOS_WORKER waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;120&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- SOS_SCHEDULER_YIELD waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;178&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- WRITELOG waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;174 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;map_key &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;177&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- FCB_REPLICA_ waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;186&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- CMEMTHREAD waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;187&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- CXPACKET waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;207&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- TRACEWRITE waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;269&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE_MUTEX waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;283&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE_QUERY_COMPILE waits
            &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;map_key &lt;span style="color:gray;"&gt;= &lt;/span&gt;284&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE_SMALL_QUERY waits
        &lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once we have the list of map_key’s defined, we can do a replace in SSMS and change map_key to wait_type and define the predicate for the sqlos.wait_info Event for our Event Session.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;CREATE EVENT SESSION &lt;/span&gt;&lt;span style="color:teal;"&gt;[TrackResourceWaits] &lt;/span&gt;&lt;span style="color:blue;"&gt;ON SERVER 
ADD EVENT  &lt;/span&gt;&lt;span style="color:teal;"&gt;sqlos&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_info
&lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Capture the database_id, session_id, plan_handle, and sql_text
    &lt;/span&gt;&lt;span style="color:blue;"&gt;ACTION&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;sqlserver&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;database_id&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:teal;"&gt;sqlserver&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;session_id&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:teal;"&gt;sqlserver&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;sql_text&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:teal;"&gt;sqlserver&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;plan_handle&lt;/span&gt;&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE
        &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;opcode &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;1 &lt;span style="color:green;"&gt;--End Events Only
            &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;duration &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; 10&lt;/span&gt;0 &lt;span style="color:green;"&gt;-- had to accumulate 100ms of time
            &lt;/span&gt;&lt;span style="color:gray;"&gt;AND ((&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;0 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;22&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- LCK_ waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;31 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;38&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- LATCH_ waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;47 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;54&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- PAGELATCH_ waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;63 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;70&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- PAGEIOLATCH_ waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;96 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;100&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- IO (Disk/Network) waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;107&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;113&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- SOS_WORKER waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;120&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- SOS_SCHEDULER_YIELD waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;178&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- WRITELOG waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;174 &lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;177&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- FCB_REPLICA_ waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;186&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- CMEMTHREAD waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;187&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- CXPACKET waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;207&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- TRACEWRITE waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;269&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE_MUTEX waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;283&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE_QUERY_COMPILE waits
                    &lt;/span&gt;&lt;span style="color:gray;"&gt;OR (&lt;/span&gt;&lt;span style="color:teal;"&gt;wait_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;284&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:green;"&gt;-- RESOURCE_SEMAPHORE_SMALL_QUERY waits
                &lt;/span&gt;&lt;span style="color:gray;"&gt;)
        )
)
&lt;/span&gt;&lt;span style="color:blue;"&gt;ADD TARGET &lt;/span&gt;&lt;span style="color:teal;"&gt;package0&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;ring_buffer&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;&lt;span style="color:teal;"&gt;max_memory&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;4096&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:teal;"&gt;EVENT_RETENTION_MODE&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:teal;"&gt;ALLOW_SINGLE_EVENT_LOSS&lt;/span&gt;&lt;span style="color:gray;"&gt;,
      &lt;/span&gt;&lt;span style="color:teal;"&gt;MAX_DISPATCH_LATENCY&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;5 &lt;span style="color:teal;"&gt;SECONDS&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now that we have the Event Session defined, we can start it as needed to collect the resource wait information for our system.&amp;#160; The only concern with this Event Session is the Target being used.&amp;#160; If the Event Session is going to run for a long period of time, or if the waits on the server being monitored occur in large quantities, the Target should be changed away from the ring_buffer to the asynchronous_file_target.&amp;#160; I configured this session to only collect waits that exceed 100ms in duration.&amp;#160; If you want waits that have shorter durations this can easily be changed.&amp;#160; If you set the duration to be &amp;gt; 0 a lot of 1-5ms waits will be collected that aren’t generally interesting.&amp;#160; To query the wait information from this Event Session using the ring_buffer:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Extract the Event information from the Event Session 
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;GETUTCDATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(), &lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@timestamp)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'datetime2'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
        &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;session_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[session_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;wait_type&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[wait_type]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;opcode&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[opcode]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[duration]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;max_duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[max_duration]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;total_duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[total_duration]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;signal_duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[signal_duration]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;completed_count&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[completed_count]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;plan_handle&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[plan_handle]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;sql_text&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[sql_text]
&lt;span style="color:blue;"&gt;FROM 
&lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;.&lt;/span&gt;query&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'.'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data 
    &lt;span style="color:blue;"&gt;FROM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(    &lt;/span&gt;&lt;span style="color:green;"&gt;-- Cast the target_data to XML 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;target_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;TargetData 
        &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_session_targets &lt;/span&gt;st 
        &lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_sessions &lt;/span&gt;s 
            &lt;span style="color:blue;"&gt;ON &lt;/span&gt;s&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;address &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;st&lt;span style="color:gray;"&gt;.&lt;/span&gt;event_session_address 
        &lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'TrackResourceWaits' 
          &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;target_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'ring_buffer'
    &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Data 
    &lt;span style="color:green;"&gt;-- Split out the Event Nodes 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;CROSS APPLY &lt;/span&gt;TargetData&lt;span style="color:gray;"&gt;.&lt;/span&gt;nodes &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'RingBufferTarget/event'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;XEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;XEvent&lt;span style="color:gray;"&gt;)   
) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;tab &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;In the result set, you will notice that some of the wait_info Events do not have an associated session_id, database_id, plan_handle, or sql_text value.&amp;#160; Depending on where the wait actually occurs in code, this information is not available to the firing Event, for example, the NETWORK_IO Event generally does not successfully collect these Actions.&lt;/p&gt;

&lt;p&gt;While collecting session and statement level waits like this is certainly interesting, there are some considerations that have to be made whenever you look at wait information like this.&amp;#160; The first consideration is that, while a specific session or statement waited on a resource, that doesn’t necessarily mean that the problem exists within that session or statement.&amp;#160; Take for example a query that has to wait 500ms on ASYNC_IO_COMPLETION waits.&amp;#160; At the same time that query is executing there are 10 DSS queries running that scan large ranges of data from the database data files and generate a lot of IO activity.&amp;#160; Where exactly is the problem?&amp;#160; The root problem is that there is a disk IO bottleneck, but not necessarily related to the query that is waiting on disk IO, it could be another query performing Table Scan that is leading to the heavy IO activity.&lt;/p&gt;</description></item><item><title>An XEvent a Day (29 of 31) – The Future – Looking at Database Startup in Denali</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/29/an-xevent-a-day-29-of-31-the-future-looking-at-database-startup-in-denali.aspx</link><pubDate>Thu, 30 Dec 2010 02:30:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:32128</guid><dc:creator>jmkehayias</dc:creator><description>&lt;P&gt;As I have said previously in this series, one of my favorite aspects of Extended Events is that it allows you to look at what is going on under the covers in SQL Server, at a level that has never previously been possible.&amp;nbsp; SQL Server Denali CTP1 includes a number of new Events that expand on the information that we can learn about how SQL Server operates and in today’s blog post we’ll look at how we can use those Events to look at what happens when a database starts up inside of SQL Server.&lt;/P&gt;
&lt;P&gt;First lets create our Event Session, which will collect a large number of events that relate to the operations that occur when a database starts in SQL Server.&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;DECLARE &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;@sqlcmd &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;nvarchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;max&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) =
&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE
name=''MonitorStartupLogRecovery'')
   DROP EVENT SESSION [MonitorStartupLogRecovery] ON SERVER;
CREATE EVENT SESSION [MonitorStartupLogRecovery]
ON SERVER
ADD EVENT sqlserver.database_started 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.databases_log_file_used_size_changed 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.databases_log_flush 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.databases_log_flush_wait 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.file_read 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.file_read_completed 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.file_write_completed 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.file_written 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_block_cache 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_block_consume 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_blocks_uncache 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_cache_buffer_refcounter_change 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_consumer_act 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_flush_complete 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_flush_requested 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_flush_start 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.log_single_record 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.new_log_interest_flip 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.redo_single_record 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.redo_target_set 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;')),
ADD EVENT sqlserver.transaction_log 
(WHERE (database_id = ' &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;+ &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DB_ID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'AdventureWorks2008R2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS varchar&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3&lt;SPAN style="COLOR:gray;"&gt;)) + &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'))
ADD TARGET package0.asynchronous_file_target(
     SET filename=''C:\SQLBlog\MonitorStartupLogRecovery.xel'',
         metadatafile=''C:\SQLBlog\MonitorStartupLogRecovery.xem'')
WITH (MAX_MEMORY = 8192KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, STARTUP_STATE = ON)'
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;EXEC&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;@sqlcmd&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;With the Event Session created, we can make some changes that write to our test database to see what happens when the database is recovered at startup. We are going to make two changes to the database.&amp;nbsp; First we’ll begin a transaction and create a table with 10 rows of data in it without committing the transaction.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;USE &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;AdventureWorks2008R2
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO
&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Begin a Transaction and leave it open
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;BEGIN TRANSACTION
&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Create the First Table
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT TOP &lt;/SPAN&gt;10 &lt;SPAN style="COLOR:gray;"&gt;*
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INTO &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;TestTable
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;Sales&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;SalesOrderDetail sod
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now in a New Query Window, we’ll create a second table with 10 rows of data without opening a transaction, and then force a dirty shutdown of the Database Engine.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;USE &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;AdventureWorks2008R2
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO
&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Create a Second Table
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT TOP &lt;/SPAN&gt;10 &lt;SPAN style="COLOR:gray;"&gt;*
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INTO &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;TestTable2
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;Sales&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;SalesOrderDetail sod
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO
&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Flush changes to data file
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CHECKPOINT
GO
&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Force Shutdown the Engine
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SHUTDOWN&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Once SHUTDOWN is issued, the process terminates, and the Database Engine will need to be restarted from the Services Snapin, the SQL Server Configuration Manager, or through SSMS.&amp;nbsp; When the Engine starts up, the Event Session will become active, and the Events will be logged to the package0.asynchronous_file_target for analysis.&amp;nbsp; Once recovery completes, we can drop the Event Session from the Server, so that the buffers flush, and we can then begin our analysis of the collected information.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;USE &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;tempdb
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO

&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Read the Raw Event data into a table
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS XML&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INTO &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;TargetEvents
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;sys&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;fn_xe_file_target_read_file&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'C:\SQLBlog\MonitorStartupLogRecovery*.xel'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'C:\SQLBlog\MonitorStartupLogRecovery*.xem'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, null, null)

&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;-- Fetch the Event Data from the Raw Event Data into another table
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/@name)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'varchar(50)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_name&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DATEADD&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;hh&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
            &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DATEDIFF&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;hh&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;GETUTCDATE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(), &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CURRENT_TIMESTAMP&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;), 
            &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/@timestamp)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'datetime2'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[timestamp]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;COALESCE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="database_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;), 
             &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/action[@name="database_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;database_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="count"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[count]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="start_log_block_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[start_log_block_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="is_read_ahead"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[is_read_ahead]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="private_consumer_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[private_consumer_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="mode"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[mode]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="file_handle"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[file_handle]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="offset"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[offset]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="file_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[file_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="filegroup_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[filegroup_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="size"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[size]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="path"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[path]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="duration"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[duration]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="io_data"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[io_data]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="resource_type"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[resource_type]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="owner_type"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[owner_type]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="transaction_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[transaction_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="lockspace_workspace_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[lockspace_workspace_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="lockspace_sub_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[lockspace_sub_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="lockspace_nest_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[lockspace_nest_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="resource_0"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[resource_0]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="resource_1"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[resource_1]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="resource_2"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[resource_2]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="object_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[object_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="associated_object_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[associated_object_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="resource_description"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[resource_description]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="database_name"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[database_name]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="log_block_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[log_block_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="log_block_size"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[log_block_size]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="from_disk"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[from_disk]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="incomplete"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[incomplete]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="cache_buffer_pointer"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[cache_buffer_pointer]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="consumer_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[consumer_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="old_weight"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[old_weight]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="new_weight"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[new_weight]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="new_position"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[new_position]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="last_log_block_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[last_log_block_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="weight"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[weight]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="address"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[address]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="type"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[type]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="current_count"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[current_count]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="change_type"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[change_type]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="activity_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[activity_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="write_size"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[write_size]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="rows"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[rows]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="pending_writes"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[pending_writes]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="pending_bytes"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[pending_bytes]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="reason"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[reason]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="waiters"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[waiters]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="error"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[error]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="slot_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[slot_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="used_size"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[used_size]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="reservation_size"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'bigint'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[reservation_size]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="log_op_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[log_op_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="log_op_name"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[log_op_name]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="interest"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[interest]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="cache_type"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[cache_type]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="keys"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[keys]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="stop_mark"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[stop_mark]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="operation"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[operation]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="success"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[success]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="index_id"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[index_id]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="log_record_size"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[log_record_size]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="context"]/text)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[context]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="replication_command"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'int'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[replication_command]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;,
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'(event/data[@name="transaction_start_time"]/value)[1]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'nvarchar(4000)'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[transaction_start_time]
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INTO &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;Results
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;TargetEvents
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now we can begin to analyze the information that we collected by querying the Results table.&amp;nbsp; Looking at the Results as a whole, we can see the database opened by reading the first page of the database and then the database boot page (page_id=9) and page 32 of the primary data file.&amp;nbsp; Then the engine scans each of the VLF’s of the transaction log.&amp;nbsp; We can tell that the log reads are scans of the VLF’s by looking at the DBCC LOGINFO information for the database and comparing the file_read offsets from the Event Session to the StartOffset of each of the VLF’s in the DBCC LOGINFO output.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;DBCC &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;LOGINFO
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_7CF47A85.png"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_7A6B48C7.png" width=573 height=256&gt;&lt;/A&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_name&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;timestamp&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;database_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;file_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;mode&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;offset&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CASE WHEN &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;file_id &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;1 &lt;SPAN style="COLOR:blue;"&gt;THEN &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;offset&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;/&lt;/SPAN&gt;8192 &lt;SPAN style="COLOR:blue;"&gt;ELSE &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;NULL &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END AS &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;page_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_block_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_block_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;start_log_block_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;last_log_block_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;from_disk&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;consumer_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;activity_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_op_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_op_name&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;change_type&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;operation&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;object_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;index_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_record_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;slot_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;used_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;reservation_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;write_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;rows&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;pending_writes&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;pending_bytes&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;context&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;waiters
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;Results
&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_52C4CC9D.png"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_7AA7CBFC.png" width=661 height=501&gt;&lt;/A&gt;&amp;nbsp; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After the startup scans the VLF’s 120K of information is read from the log file, and the log buffers start to be consumed to determine the redo start point for recovery.&amp;nbsp; We can filter our Event data to remove Events that while interesting are not necessary for our analysis at the moment, as well as to reduce the number of columns being returned from the data set.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_name&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;timestamp&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;file_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;mode&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;offset&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_block_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;COALESCE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_op_name&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;operation&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;as &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;[operation]&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;slot_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, 
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;object_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;index_id&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;log_record_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;context&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;write_size&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;rows
FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;Results
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;&lt;SPAN style="COLOR:teal;"&gt;event_name &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;NOT IN (&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'log_consumer_act'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'log_single_record'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'log_cache_buffer_refcounter_change'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'file_read'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) 
&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_209D7C53.png"&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_06C94624.png" width=627 height=351&gt;&lt;/A&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;With the filtered results, we can see the log reads into cache and the setting of the redo target.&amp;nbsp; If we scroll down further, we can get a better picture of what is happening.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_58038D81.png" target=_blank&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_12EAC04B.png" width=644 height=321&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;The last active log blog was consumed, and the redo target was set at that log_block_id.&amp;nbsp; Then the log is reread starting at offset 318976 and the blocks get cached and the redo operations begin against the database.&amp;nbsp; Scrolling through the results further, we can see that the redo operations continue as the log blocks increase up to the Checkpoint operation that was executed immediately before the Shutdown of the instance occurred, at the log block that was set as the redo target originally.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_3B39F29F.png" target=_blank&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_684EDF6D.png" width=644 height=250&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;At this point the data file begins to be read so that the undo operations can be performed before making the database available.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_2D1B03A2.png" target=_blank&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_5E3A3E42.png" width=644 height=163&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;After the undo completes the database_started Event is raised and that database becomes available for use.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_0A76C527.png" target=_blank&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_74ACDCC9.png" width=644 height=167&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;To validate that the changes we see occurring after the redo operations and before the database_started Event, we can set the database OFFLINE, recreate our Event Session, and then bring the database back ONLINE again, and then compare the logged Events when no changes have occurred to our original Events when known changes have occurred.&amp;nbsp; I am not going to do that in this blog post, but will instead leave that up to the reader to investigate on their own.&lt;/P&gt;</description></item><item><title>An XEvent a Day (28 of 31) – Tracking Page Compression Operations</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/28/an-xevent-a-day-28-of-31-tracking-page-compression-operations.aspx</link><pubDate>Wed, 29 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:32072</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;The Database Compression feature in SQL Server 2008 Enterprise Edition can provide some significant reductions in storage requirements for SQL Server databases, and in the right implementations and scenarios performance improvements as well.&amp;#160; There isn’t really a whole lot of information about the operations of database compression that is documented as being available in the DMV’s or SQL Trace.&amp;#160; Paul Randal pointed out on Twitter today that sys.dm_db_index_operational_stats() provides the page_compression_attempt_count and page_compression_success_count available.&amp;#160; Beyond that the only other documented information for monitoring Data Compression are the Page Compression Attempts/sec and Pages Compressed/sec Performance Counters of the SQL Server:Access Methods object in Perfmon (&lt;a title="http://msdn.microsoft.com/en-us/library/cc280449.aspx" href="http://msdn.microsoft.com/en-us/library/cc280449.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc280449.aspx&lt;/a&gt;).&amp;#160; &lt;/p&gt;  &lt;p&gt;There is one thing in common about the documented methods of monitoring Data Compression, and that is they all only deal with Page compression, and not Row compression, and in Extended Events we find the same commonality as there are no Row compression Events in Extended Events.&amp;#160; There are two Page compression Events in Extended Events; sqlserver.page_compression_attempt_failed and sqlserver.page_compression_tracing.&amp;#160; These two Events can be used to track Page compression operations at multiple levels, including database, object, index, and even down to the individual page. The sqlserver.page_compression_tracing Event provides Start and End tracing of Page compression operations inside of the Database Engine and returns the database_id, index_id, rowset_id, page_id, and duration of the compression operation.&amp;#160; The sqlserver.page_compression_attempt_failed is really poorly named, and doesn’t provide information about failures in the sense that something broke, but provides information for why a page compression attempt did not actually change the compression of the data in the page.&amp;#160; It also returns the database_id, index_id, rowset_id, and page_id for the compression attempt, and it also includes a failure_reason column which correlates to the page_compression_failure_reason Map Value.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Get the payload information for the Events 
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;column_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;name&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;type_name
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_xe_object_columns
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_name &lt;/span&gt;&lt;span style="color:gray;"&gt;IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'page_compression_tracing'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                      &lt;/span&gt;&lt;span style="color:red;"&gt;'page_compression_attempt_failed'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
  AND &lt;/span&gt;column_type &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'data'&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_30ADD76D.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_27719C2C.png" width="540" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To demonstrate how these Events function, I am going to use the LineItem table from the TPC-H Benchmark that was created by Quest Benchmark Factory using Level 2 for the table sizing, which makes the table just at 1.8GB in size.&amp;#160; All of the indexes on the table will be rebuilt using PAGE compression, and then 10,000 rows will be added to the table.&amp;#160; To setup the environment, first load the TPC-H LineItem table with the appropriate seed of data, this can be done with the free trial version of Benchmark Factory.&amp;#160; Then rebuild all of the indexes on the LineItem table using PAGE compression, and review the PAGE compression statistics from sys.dm_db_index_operational_stats for the database and object.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;[TPCH]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Rebuild the indexes with Page compression 
&lt;/span&gt;&lt;span style="color:blue;"&gt;ALTER INDEX &lt;/span&gt;&lt;span style="color:gray;"&gt;ALL &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;dbo&lt;span style="color:gray;"&gt;.&lt;/span&gt;H_Lineitem &lt;span style="color:blue;"&gt;REBUILD WITH &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;DATA_COMPRESSION &lt;span style="color:gray;"&gt;= &lt;/span&gt;PAGE&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Look at the compression information in sys.dm_db_index_operational_stats
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;index_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_attempt_count&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;,
    (&lt;/span&gt;page_compression_attempt_count &lt;span style="color:gray;"&gt;- &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;page_compression_failure_count
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_db_index_operational_stats&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;db_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'TPCH'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'H_Lineitem'&lt;/span&gt;&lt;span style="color:gray;"&gt;), null, null)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_4DD37F77.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_4D674C82.png" width="644" height="71" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once the table and its indexes have been rebuilt using PAGE compression, we can then create our Event Session, start it, and add 10,000 rows to the LineItem table.&amp;#160; After we add the rows, we can then check the page compression statistics in sys.dm_db_index_operational_stats, and drop our Event Session from the server. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Create an Event Session to Track the Failed attempts
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE EVENT SESSION &lt;/span&gt;PageCompressionTracing
&lt;span style="color:blue;"&gt;ON SERVER
ADD EVENT &lt;/span&gt;sqlserver&lt;span style="color:gray;"&gt;.&lt;/span&gt;page_compression_attempt_failed&lt;span style="color:gray;"&gt;,
&lt;/span&gt;&lt;span style="color:blue;"&gt;ADD EVENT &lt;/span&gt;sqlserver&lt;span style="color:gray;"&gt;.&lt;/span&gt;page_compression_tracing
&lt;span style="color:blue;"&gt;ADD TARGET &lt;/span&gt;package0&lt;span style="color:gray;"&gt;.&lt;/span&gt;asynchronous_file_target&lt;span style="color:gray;"&gt;(
     &lt;/span&gt;&lt;span style="color:blue;"&gt;SET filename&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;'C:\SQLBlog\PageCompressionTracing.xel'&lt;/span&gt;&lt;span style="color:gray;"&gt;,
         &lt;/span&gt;metadatafile&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:red;"&gt;'C:\SQLBlog\PageCompressionTracing.xem'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;WITH &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;MAX_MEMORY &lt;span style="color:gray;"&gt;= &lt;/span&gt;8MB&lt;span style="color:gray;"&gt;, &lt;/span&gt;EVENT_RETENTION_MODE &lt;span style="color:gray;"&gt;= &lt;/span&gt;ALLOW_SINGLE_EVENT_LOSS&lt;span style="color:gray;"&gt;, &lt;/span&gt;MAX_DISPATCH_LATENCY&lt;span style="color:gray;"&gt;=&lt;/span&gt;5SECONDS&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Start the Event Session
&lt;/span&gt;&lt;span style="color:blue;"&gt;ALTER EVENT SESSION &lt;/span&gt;PageCompressionTracing
&lt;span style="color:blue;"&gt;ON SERVER
STATE&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;START
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Insert 10000 rows into the H_Lineitem table
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;H_Lineitem
    &lt;span style="color:gray;"&gt;(&lt;/span&gt;l_orderkey&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_partkey&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_suppkey&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_linenumber&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_quantity&lt;span style="color:gray;"&gt;, 
     &lt;/span&gt;l_extendedprice&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_discount&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_tax&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_returnflag&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_linestatus&lt;span style="color:gray;"&gt;, 
     &lt;/span&gt;l_shipdate&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_commitdate&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_receiptdate&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_shipinstruct&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_shipmode&lt;span style="color:gray;"&gt;, 
     &lt;/span&gt;l_comment&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT TOP &lt;/span&gt;10000 
     l_orderkey&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_partkey&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_suppkey&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_linenumber&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_quantity&lt;span style="color:gray;"&gt;, 
     &lt;/span&gt;l_extendedprice&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_discount&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_tax&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_returnflag&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_linestatus&lt;span style="color:gray;"&gt;, 
     &lt;/span&gt;l_shipdate&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_commitdate&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_receiptdate&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_shipinstruct&lt;span style="color:gray;"&gt;, &lt;/span&gt;l_shipmode&lt;span style="color:gray;"&gt;, 
     &lt;/span&gt;l_comment
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;H_Lineitem
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Look at the compression information in sys.dm_db_index_operational_stats
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;index_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_attempt_count&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;,
    (&lt;/span&gt;page_compression_attempt_count &lt;span style="color:gray;"&gt;- &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;page_compression_failure_count
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_db_index_operational_stats&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;db_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'TPCH'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'H_Lineitem'&lt;/span&gt;&lt;span style="color:gray;"&gt;), null, null)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Drop the Event Session
&lt;/span&gt;&lt;span style="color:blue;"&gt;DROP EVENT SESSION &lt;/span&gt;PageCompressionTracing
&lt;span style="color:blue;"&gt;ON SERVER
GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_0CC50013.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_0C58CD1E.png" width="644" height="70" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now we can parse the Events that were captured by our Event Session and compare the information presented by sys.dm_db_index_operational_stats() with what was collected by Extended Events.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Create our result Analysis database
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;[PageCompTestResults]
&lt;span style="color:blue;"&gt;GO
USE &lt;/span&gt;[PageCompTestResults]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Create intermediate temp table for raw event data
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;RawEventData
&lt;span style="color:gray;"&gt;(&lt;/span&gt;Rowid &lt;span style="color:blue;"&gt;int identity primary key&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;event_data &lt;span style="color:blue;"&gt;xml&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Read the file data into intermediate temp table
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;RawEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;fn_xe_file_target_read_file&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'C:\SQLBlog\PageCompressionTracing*.xel'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                                     &lt;/span&gt;&lt;span style="color:red;"&gt;'C:\SQLBlog\PageCompressionTracing*.xem'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                                     null, null)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Fetch the Event Data from the Event Session Target
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;RowID&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, 
            &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;GETUTCDATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(), &lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@timestamp)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'datetime2'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
             &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;file_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[file_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;page_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[page_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;rowset_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[rowset_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;failure_reason&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(150)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[failure_reason]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;system_thread_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[system_thread_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;scheduler_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[scheduler_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;cpu_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[cpu_id]
&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;ParsedResults
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;RawEventData
&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;After parsing out the data, we can begin to really leverage the information we’ve gathered.&amp;#160; If we join the ParsedResults table to sys.partitions for our TPCH database by rowset_id = hobt_id, we can get the object_id and index_id and aggregate the failure reasons up to the object and index level.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;pr&lt;span style="color:gray;"&gt;.&lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;index_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;failure_reason&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;COUNT&lt;/span&gt;&lt;span style="color:gray;"&gt;(*) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;failure_count
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;TPCH&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;partitions &lt;/span&gt;p
&lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;ParsedResults pr
    &lt;span style="color:blue;"&gt;ON &lt;/span&gt;pr&lt;span style="color:gray;"&gt;.&lt;/span&gt;rowset_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;hobt_id
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;event_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'page_compression_attempt_failed'
&lt;/span&gt;&lt;span style="color:blue;"&gt;GROUP BY     &lt;/span&gt;pr&lt;span style="color:gray;"&gt;.&lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;index_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;failure_reason
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Look at the compression information in sys.dm_db_index_operational_stats
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;index_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_attempt_count&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;,
    (&lt;/span&gt;page_compression_attempt_count &lt;span style="color:gray;"&gt;- &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;page_compression_failure_count
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_db_index_operational_stats&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;db_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'TPCH'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'H_Lineitem'&lt;/span&gt;&lt;span style="color:gray;"&gt;), null, null)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_1DC92DF6.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_591C93B4.png" width="644" height="214" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With this we can se that the Extended Events sqlserver.page_compression_attempt_failed Event tracks failures and attempts that are not counted in sys.dm_db_index_operational_stats().&amp;#160; The PageModCountBelowThreshold failure isn’t really a failed attempt at compression.&amp;#160; This reason shows that the page was evaluated for recalculation, and the modified counter for the page hadn’t passed the internal threshold for recalculation so the actual compression operation wasn’t performed.&amp;#160; If we look at the sqlserver.page_compression_tracing Event information, we can see how the numbers begin to come together to match what is output by sys.dm_db_index_operational_stats().&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;pr&lt;span style="color:gray;"&gt;.&lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;index_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;COUNT&lt;/span&gt;&lt;span style="color:gray;"&gt;(*) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;attempt_count
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;TPCH&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;partitions &lt;/span&gt;p
&lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;ParsedResults pr
    &lt;span style="color:blue;"&gt;ON &lt;/span&gt;pr&lt;span style="color:gray;"&gt;.&lt;/span&gt;rowset_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;hobt_id
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;event_name &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'page_compression_tracing'
  &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;opcode &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'Begin'
&lt;/span&gt;&lt;span style="color:blue;"&gt;GROUP BY     &lt;/span&gt;pr&lt;span style="color:gray;"&gt;.&lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;p&lt;span style="color:gray;"&gt;.&lt;/span&gt;index_id
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Look at the compression information in sys.dm_db_index_operational_stats
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;index_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_attempt_count&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;,
    (&lt;/span&gt;page_compression_attempt_count &lt;span style="color:gray;"&gt;- &lt;/span&gt;page_compression_success_count&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;page_compression_failure_count
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;dm_db_index_operational_stats&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;db_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'TPCH'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:magenta;"&gt;object_id&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'H_Lineitem'&lt;/span&gt;&lt;span style="color:gray;"&gt;), null, null)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_5124F152.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_02B05EE8.png" width="644" height="152" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We have 193 attempts by this Event, and we have 72 PageModCountBelowThreshold failures, matching our actual attempts of 121 from the DMF.&amp;#160; We can then subtract out the other failures and get the 93 successful operations matching the DMF as well.&lt;/p&gt;</description></item><item><title>An XEvent a Day (27 of 31) – The Future - Tracking Page Splits in SQL Server Denali CTP1</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/27/tracking-page-splits-in-sql-server-denali-ctp1.aspx</link><pubDate>Tue, 28 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:29426</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;Nearly two years ago Kalen Delaney blogged about &lt;a href="http://sqlblog.com/blogs/kalen_delaney/archive/2008/12/20/splitting-a-page-into-multiple-pages.aspx" target="_blank"&gt;Splitting a page into multiple pages&lt;/a&gt;, showing how page splits occur inside of SQL Server.&amp;#160; Following her blog post, Michael Zilberstein wrote a post, &lt;a href="http://sqlblog.com/blogs/michael_zilberstein/archive/2009/02/05/11734.aspx" target="_blank"&gt;Monitoring Page Splits with Extended Events&lt;/a&gt;, that showed how to see the sqlserver.page_split Events using Extended Events.&amp;#160; Eladio Rincón also blogged about &lt;a href="http://msmvps.com/blogs/eladio_rincon/archive/2008/12/07/using-xevents-extended-events-in-sql-server-2008-to-detect-which-queries-are-causing-page-splits.aspx" target="_blank"&gt;Using XEvents (Extended Events) in SQL Server 2008 to detect which queries are causing Page Splits&lt;/a&gt;, but not in relation to Kalen’s blog post.&amp;#160; Both of these blog posts demonstrate how to get the sqlserver.page_split Events, but as discussed in the comments section of Michael Zilberstein’s blog post, the Event fires for all page splits and Adam Machanic and I talked after Eladio’s blog post and opened a connect item to have the sqlserver.page_split Event extended in the product so that you know what kind of split is actually occurring.&lt;/p&gt;  &lt;p&gt;&lt;a title="https://connect.microsoft.com/SQLServer/feedback/details/388482/sql-server-extended-events-page-split-event-additions" href="https://connect.microsoft.com/SQLServer/feedback/details/388482/sql-server-extended-events-page-split-event-additions"&gt;https://connect.microsoft.com/SQLServer/feedback/details/388482/sql-server-extended-events-page-split-event-additions&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The CTP1 release of Denali has significant changes to the sqlserver.page_split Event, that makes it easier to find the splitting object as well the type of split that is occurring.&amp;#160; Before we look at that, I am going to show the code required to get the object and index information from SQL Server 2008, which is based on Adam’s comments to use sys.dm_os_buffer_descriptors.&amp;#160; For the examples in this blog post I am going use Kalen’s multipage split example from her blog post referenced above.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre style="font-size:12px;"&gt;&lt;font color="green"&gt;-- Create the table &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;USE &lt;/font&gt;&lt;font color="black"&gt;tempdb&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET NOCOUNT ON&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;IF &lt;/font&gt;&lt;font color="gray"&gt;EXISTS (&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="gray"&gt;* &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;sys.tables&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;name &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="red"&gt;'split_page'&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;DROP TABLE &lt;/font&gt;&lt;font color="black"&gt;split_page&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE TABLE &lt;/font&gt;&lt;font color="black"&gt;split_page &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;id &lt;/font&gt;&lt;font color="blue"&gt;INT &lt;/font&gt;&lt;font color="#434343"&gt;IDENTITY&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="black"&gt;2&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;PRIMARY KEY&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;id2 bigint &lt;/font&gt;&lt;font color="blue"&gt;DEFAULT &lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;data1 &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;33&lt;/font&gt;&lt;font color="gray"&gt;) NULL, &lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;data2 &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;8000&lt;/font&gt;&lt;font color="gray"&gt;) NULL);&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- fill page until no more rows fit&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT INTO &lt;/font&gt;&lt;font color="black"&gt;split_page &lt;/font&gt;&lt;font color="blue"&gt;DEFAULT VALUES&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO 385&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- verify that there is only one data page &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;DBCC &lt;/font&gt;&lt;font color="black"&gt;IND&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;tempdb&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;split_page&lt;/font&gt;&lt;font color="gray"&gt;, -&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Create MonitorPageSplits Extended Event Session &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;IF &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;1 &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;sys.server_event_sessions &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;name &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="red"&gt;'MonitorPageSplits'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;IS &lt;/font&gt;&lt;font color="gray"&gt;NOT NULL &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;DROP &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER &lt;br /&gt;GO &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ADD &lt;/font&gt;&lt;font color="black"&gt;EVENT sqlserver.page_split &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;( &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="black"&gt;ACTION &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;sqlserver.database_id&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;sqlserver.sql_text&lt;/font&gt;&lt;font color="gray"&gt;)&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;sqlserver.database_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;2 &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ADD &lt;/font&gt;&lt;font color="black"&gt;TARGET package0.ring_buffer &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;WITH&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;MAX_DISPATCH_LATENCY &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;1 SECONDS&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Start the MonitorPageSplits Event Session &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ALTER &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER STATE &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;start&lt;/font&gt;&lt;font color="gray"&gt;; &lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Now insert one more row, this time filling the VARCHARs to the maximum length. &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET IDENTITY_INSERT &lt;/font&gt;&lt;font color="black"&gt;split_page&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT INTO &lt;/font&gt;&lt;font color="black"&gt;split_page &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;id&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;id2&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;data1&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;data2&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;111&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="magenta"&gt;REPLICATE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'a'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;33&lt;/font&gt;&lt;font color="gray"&gt;), &lt;/font&gt;&lt;font color="magenta"&gt;REPLICATE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'b'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;8000&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET IDENTITY_INSERT &lt;/font&gt;&lt;font color="black"&gt;split_page&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;OFF&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ALTER &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;DROP &lt;/font&gt;&lt;font color="black"&gt;EVENT sqlserver.page_split&lt;/font&gt;&lt;font color="gray"&gt;; &lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Wait to allow dispatch to complete&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;WAITFOR &lt;/font&gt;&lt;font color="black"&gt;DELAY &lt;/font&gt;&lt;font color="red"&gt;'00:00:01.000' &lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;oTab.&lt;/font&gt;&lt;font color="gray"&gt;*&lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;p.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;p.index_id&lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_NAME&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;p.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;i.name&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;FROM&lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="black"&gt;XEvent&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.query&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'.'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;time&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(@timestamp)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'datetime'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="magenta"&gt;FILE_ID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''file_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;page_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''page_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;database_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(action[@name=''database_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;sql_text&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(action[@name=''sql_text'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'varchar(max)'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;( &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="magenta"&gt;CAST&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;target_data &lt;/font&gt;&lt;font color="blue"&gt;AS XML&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;target_data &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;sys.dm_xe_session_targets xst &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.dm_xe_sessions xs &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;xs.address &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;xst.event_session_address &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;xs.name &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="red"&gt;'MonitorPageSplits' &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;tab &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;target_data&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;CROSS &lt;/font&gt;&lt;font color="black"&gt;APPLY target_data.nodes&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'/RingBufferTarget/event'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;EventNodes&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;XEvent&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;oTab&lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.dm_os_buffer_descriptors &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;obd&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;obd.database_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;oTab.database_id&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;obd.&lt;/font&gt;&lt;font color="magenta"&gt;FILE_ID &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;oTab.&lt;/font&gt;&lt;font color="magenta"&gt;FILE_ID&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;obd.page_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;oTab.page_id&lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.allocation_units au&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;au.allocation_unit_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;obd.allocation_unit_id&lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.partitions p &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;p.partition_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;au.container_id&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.indexes i&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;p.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;i.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;p.index_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;i.index_id&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- verify that there is only one data page &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;DBCC &lt;/font&gt;&lt;font color="black"&gt;IND&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;tempdb&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;split_page&lt;/font&gt;&lt;font color="gray"&gt;, -&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The above code creates a table in tempdb, loads one page of data in it exactly as in Kalen’s blog post, and then creates an Event Session for the sqlserver.page_split Event in tempdb, that also collects the sqlserver.database_id and sqlserver.sql_text actions when the Event fires.&amp;#160; After triggering the page split, it drops the Event from the Event Session and then uses WAITFOR DELAY to allow the events to be buffered to the package0.ring_buffer Target.&amp;#160; Then it shreds the XML and joins to the DMV’s to get the object and index names.&amp;#160; The output of running the above script in SQL Server 2008 should be similar to the following, showing 10 split events and 10 additional pages in the database table.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_0636E815.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_13E9A41D.png" width="644" height="364" /&gt;&lt;/a&gt; .&amp;#160; &lt;/p&gt;

&lt;p&gt;Note that the only two columns returned by the sqlserver.page_split Event are the file_id and page_id.&amp;#160; In SQL Server Denali CTP1, the sqlserver.page_split event now has a much larger Event payload associated with it.&amp;#160; It now returns the file_id, page_id, database_id (as a part of the event, not requiring an action), rowset_id, splitOperation, new_page_file_id, and the new_page_page_id associated with the page_split Event.&amp;#160;&amp;#160; This makes the Event much more useful and allows it to be used without having to query the buffer descriptors to find the object association.&amp;#160; The following demo is identical to the demo for SQL Server 2008 listed above with the exception of that the XQuery is slightly different (a requirement to pull the new information from the XML).&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;/p&gt;

  &lt;pre style="font-size:12px;"&gt;&lt;font color="green"&gt;-- Create the table &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;USE &lt;/font&gt;&lt;font color="black"&gt;tempdb&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET NOCOUNT ON&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;IF &lt;/font&gt;&lt;font color="gray"&gt;EXISTS (&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="gray"&gt;* &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;sys.tables&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;name &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="red"&gt;'split_page'&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;DROP TABLE &lt;/font&gt;&lt;font color="black"&gt;split_page&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE TABLE &lt;/font&gt;&lt;font color="black"&gt;split_page &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;id &lt;/font&gt;&lt;font color="blue"&gt;INT &lt;/font&gt;&lt;font color="#434343"&gt;IDENTITY&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="black"&gt;2&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;PRIMARY KEY&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;id2 bigint &lt;/font&gt;&lt;font color="blue"&gt;DEFAULT &lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;,&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;data1 &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;33&lt;/font&gt;&lt;font color="gray"&gt;) NULL, &lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;data2 &lt;/font&gt;&lt;font color="blue"&gt;VARCHAR&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;8000&lt;/font&gt;&lt;font color="gray"&gt;) NULL);&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- fill page until no more rows fit&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT INTO &lt;/font&gt;&lt;font color="black"&gt;split_page &lt;/font&gt;&lt;font color="blue"&gt;DEFAULT VALUES&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO 385&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- verify that there is only one data page &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;DBCC &lt;/font&gt;&lt;font color="black"&gt;IND&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;tempdb&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;split_page&lt;/font&gt;&lt;font color="gray"&gt;, -&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Create MonitorPageSplits Extended Event Session &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;IF &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;1 &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;sys.server_event_sessions &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;name &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="red"&gt;'MonitorPageSplits'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;IS &lt;/font&gt;&lt;font color="gray"&gt;NOT NULL &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;DROP &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER &lt;br /&gt;GO &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;CREATE &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ADD &lt;/font&gt;&lt;font color="black"&gt;EVENT sqlserver.page_split &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;( &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="black"&gt;ACTION &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;sqlserver.database_id&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;sqlserver.sql_text&lt;/font&gt;&lt;font color="gray"&gt;)&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;sqlserver.database_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;2 &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ADD &lt;/font&gt;&lt;font color="black"&gt;TARGET package0.ring_buffer &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;WITH &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;MAX_DISPATCH_LATENCY &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;1 SECONDS&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Start the MonitorPageSplits Event Session &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ALTER &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER STATE &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;start&lt;/font&gt;&lt;font color="gray"&gt;; &lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- Now insert one more row, this time filling the VARCHARs to the maximum length. &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET IDENTITY_INSERT &lt;/font&gt;&lt;font color="black"&gt;split_page&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;INSERT INTO &lt;/font&gt;&lt;font color="black"&gt;split_page &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;id&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;id2&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;data1&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;data2&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="black"&gt;111&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;0&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="magenta"&gt;REPLICATE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'a'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;33&lt;/font&gt;&lt;font color="gray"&gt;), &lt;/font&gt;&lt;font color="magenta"&gt;REPLICATE&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'b'&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;8000&lt;/font&gt;&lt;font color="gray"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SET IDENTITY_INSERT &lt;/font&gt;&lt;font color="black"&gt;split_page&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;OFF&lt;/font&gt;&lt;font color="gray"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO &lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;ALTER &lt;/font&gt;&lt;font color="black"&gt;EVENT SESSION MonitorPageSplits &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;SERVER &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;DROP &lt;/font&gt;&lt;font color="black"&gt;EVENT sqlserver.page_split&lt;/font&gt;&lt;font color="gray"&gt;; &lt;br /&gt;&lt;/font&gt;&lt;font color="red"&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="black"&gt;GO&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="black"&gt;event_time&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(@timestamp)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'datetime'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;orig_file_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''file_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;orig_page_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''page_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;database_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''database_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;p.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;index_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;p.index_id&lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_NAME&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_NAME&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;p.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&lt;/font&gt;&lt;font color="gray"&gt;)&lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;index_name&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;i.name&lt;br /&gt;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;rowset_id&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''rowset_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'bigint'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;splitOperation&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''splitOperation'']/text)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'varchar(255)'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;new_page_file_id&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''new_page_file_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;new_page_page_id&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''new_page_page_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'int'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&amp;#160; , &lt;/font&gt;&lt;font color="black"&gt;sql_text&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(action[@name=''sql_text'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'varchar(max)'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;( &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;SELECT &lt;/font&gt;&lt;font color="magenta"&gt;CAST&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;target_data &lt;/font&gt;&lt;font color="blue"&gt;AS XML&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;target_data &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;FROM &lt;/font&gt;&lt;font color="black"&gt;sys.dm_xe_session_targets xst &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.dm_xe_sessions xs &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;xs.address &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;xst.event_session_address &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;WHERE &lt;/font&gt;&lt;font color="black"&gt;xs.name &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="red"&gt;'MonitorPageSplits' &lt;br /&gt;&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;tab &lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;target_data&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;CROSS &lt;/font&gt;&lt;font color="black"&gt;APPLY target_data.nodes&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'/RingBufferTarget/event'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;/font&gt;&lt;font color="blue"&gt;AS &lt;/font&gt;&lt;font color="black"&gt;EventNodes&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;XEvent&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.allocation_units au&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;au.container_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;XEvent.value&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="red"&gt;'(data[@name=''rowset_id'']/value)[1]'&lt;/font&gt;&lt;font color="gray"&gt;,&lt;/font&gt;&lt;font color="red"&gt;'bigint'&lt;/font&gt;&lt;font color="gray"&gt;) &lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.partitions p &lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;p.partition_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;au.container_id&amp;#160; &lt;br /&gt;&lt;/font&gt;&lt;font color="magenta"&gt;LEFT &lt;/font&gt;&lt;font color="blue"&gt;JOIN &lt;/font&gt;&lt;font color="black"&gt;sys.indexes i&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="blue"&gt;ON &lt;/font&gt;&lt;font color="black"&gt;p.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;i.&lt;/font&gt;&lt;font color="magenta"&gt;OBJECT_ID&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="gray"&gt;AND &lt;/font&gt;&lt;font color="black"&gt;p.index_id &lt;/font&gt;&lt;font color="blue"&gt;= &lt;/font&gt;&lt;font color="black"&gt;i.index_id&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;font color="green"&gt;-- View the Page allocations &lt;br /&gt;&lt;/font&gt;&lt;font color="blue"&gt;DBCC &lt;/font&gt;&lt;font color="black"&gt;IND&lt;/font&gt;&lt;font color="gray"&gt;(&lt;/font&gt;&lt;font color="black"&gt;tempdb&lt;/font&gt;&lt;font color="gray"&gt;, &lt;/font&gt;&lt;font color="black"&gt;split_page&lt;/font&gt;&lt;font color="gray"&gt;, -&lt;/font&gt;&lt;font color="black"&gt;1&lt;/font&gt;&lt;font color="gray"&gt;);&lt;/font&gt;&lt;/pre&gt;

  &lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you run the above demo the output should be similar to the below (if you click on the picture, it will open up larger).&amp;#160; One thing that should become immediately obvious is that the same demo in Denali is doing 1/3rd of the page splits that occur in SQL Server 2008.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image3_30D2C8F2.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image3_thumb_1CB9AC69.png" width="644" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The old_page_id and new_page_id tell where the page originated and moved to, and the splitOperation tells the type of split.&amp;#160; In this case only two of the type of splits are occurring; SPLIT_FOR_ROOT_NODE which occurs when the first page allocated is split into multiple pages, and SPLIT_FOR_INSERT which occurs as the inserts continue and the pages are split to accommodate the data.&amp;#160; There are a number of additional split operations that exist in SQL Server Denali CTP1 including, SPLIT_FOR_DELETE, SPLIT_FOR_GHOST, SPLIT_FOR_INTERNAL_NODE, and SPLIT_FOR_UPDATE.&amp;#160; I’ve tried to figure out how to correlate the output from DBCC IND with the data held in the Event Session for page splits to correlate the old_page_id and new_page_id to identify problematic splits, but haven’t finalized validation of my tests yet (hopefully I can finish this work and I’ll write an update to this blog post showing how to do this at some point in the near future).&amp;#160; One item that I have noted in my testing is that mid-page splits generally generate multiple sqlserver.page_split Events in the same operation, similar to the demonstrations used in this example, where as end-page splits for identity and sequential GUID inserts do not.&amp;#160; I am not certain that this is a valid conclusion to come to at this point and have further testing to do to investigate page splits more.&lt;/p&gt;</description></item><item><title>An XEvent a Day (26 of 31) – Configuring Session Options</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/26/an-xevent-a-day-26-of-31-configuring-session-options.aspx</link><pubDate>Mon, 27 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31977</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;There are 7 Session level options that can be configured in Extended Events that affect the way an Event Session operates.&amp;#160; These options can impact performance and should be considered when configuring an Event Session.&amp;#160; I have made use of a few of these periodically throughout this months blog posts, and in today’s blog post I’ll cover each of the options separately, and provide further information about their usage.&amp;#160; Mike Wachal from the Extended Events team at Microsoft, talked about the Session options on his blog post, &lt;a href="http://sqlblog.com/blogs/extended_events/archive/2010/03/31/option-trading-getting-the-most-out-of-the-event-session-options.aspx"&gt;Option Trading: Getting the most out of the event session options&lt;/a&gt;, and I’d recommend giving it a read for additional information as well.&lt;/p&gt;  &lt;h2&gt;EVENT_RETENTION_MODE&lt;/h2&gt;  &lt;p&gt;The EVENT_RETENTION_MODE option specifies how the Event Session handles Event loss when Events generate faster than they can be dispatched to the Targets.&amp;#160; There are three possible values for this option; ALLOW_SINGLE_EVENT_LOSS, ALLOW_MULTIPLE_EVENT_LOSS, and NO_EVENT_LOSS.&amp;#160; This option directly affects the possible impact that an Event Session may have on the performance of a system while the Event Session is active.&amp;#160; A trade off occurs between performance impact and the guarantee whether all Events are captured or not.&lt;/p&gt;  &lt;h3&gt;ALLOW_SINGLE_EVENT_LOSS &lt;/h3&gt;  &lt;p&gt;The ALLOW_SINGLE_EVENT_LOSS value is the system &lt;strong&gt;default&lt;/strong&gt; for all Event Sessions where the EVENT_RETENTION_MODE is not explicitly specified as a part of the Event Session definition.&amp;#160; This value allows single events to be dropped and lost from the session when the memory buffers for the Event Session are full and dispatch to the Targets can not keep up with the Event generation.&amp;#160; &lt;/p&gt;  &lt;h3&gt;ALLOW_MULTIPLE_EVENT_LOSS&lt;/h3&gt;  &lt;p&gt;The ALLOW_MULTIPLE_EVENT_LOSS value allows an entire memory buffer containing multiple events to be dropped and lost when the memory buffers are full and the Events are generating faster than the buffers can be dispatched to the Targets.&amp;#160; This can minimize the performance impact on the server at the trade off that many Events could potentially be lost, with the number of Events lost depending on the size of the Events being generated, the configuration of the MAX_MEMORY session option, and the MEMORY_PARTITION_MODE session option.&amp;#160; &lt;/p&gt;  &lt;h3&gt;NO_EVENT_LOSS&lt;/h3&gt;  &lt;p&gt;The NO_EVENT_LOSS value guarantees that all Events that fire are captured, but at the expense of possible system performance degradation when the Event Session is active.&amp;#160; If the memory buffers are all full and an Event fires, the task firing the Event will wait until space is available in a memory buffer for the Event to be buffered.&amp;#160; This option value is not recommended by the Extended Events team at Microsoft for most Event Sessions and should be used with extreme caution and only when it is absolutely necessary that every Event be captured, even at the expense of degraded performance of the system.&lt;/p&gt;  &lt;h2&gt;MAX_DISPATCH_LATENCY&lt;/h2&gt;  &lt;p&gt;The MAX_DISPATCH_LATENCY option specifies the time in seconds that Events are held in a memory buffer that is not full before being dispatched to the asynchronous session Targets.&amp;#160; The &lt;strong&gt;default&lt;/strong&gt; value if the MAX_DISPATCH_LATENCY is not explicitly defined in the Session definition is 30 seconds, and the option has a minimum value of 1 second.&amp;#160; If a value of 0 or INFINITE is specified, the Events held in a memory buffer will not be dispatched until the memory buffer becomes full.&lt;/p&gt;  &lt;h2&gt;MAX_EVENT_SIZE&lt;/h2&gt;  &lt;p&gt;The MAX_EVENT_SIZE option specifies the maximum size in kilobytes or megabytes an individual Event can be.&amp;#160; The &lt;strong&gt;default &lt;/strong&gt;value for this option when it is not explicitly set in the Session definition is 0KB, allowing the maximum Event size to be the size of a single memory buffer in the Event Session.&amp;#160; This option can be explicitly set to allow Events that are larger than a single memory buffer to be captured by the Event Session.&amp;#160; The minimum value for this option is 64KB.&lt;/p&gt;  &lt;h2&gt;MAX_MEMORY&lt;/h2&gt;  &lt;p&gt;The MAX_MEMORY option specifies the amount of memory in kilobytes or megabytes that is allocated to the memory buffers for the Event Session.&amp;#160; The value of this options is divided evenly amongst the memory buffers that are created for the Event Session based on the configuration of the MEMORY_PARTITION_MODE session option.&amp;#160; The MAX_MEMORY option can be used to increase the memory available for buffering Events when a large number of Events are expected to fire, minimizing Event loss due to full memory buffers.&amp;#160; The &lt;strong&gt;default &lt;/strong&gt;value for this option is 4 megabytes (MB) or 4096 kilobytes (KB).&amp;#160; &lt;/p&gt;  &lt;p&gt;Mike Wachal blogged about this option on the Extended Events blog &lt;a href="http://sqlblog.com/blogs/extended_events/archive/2010/06/29/take-it-to-the-max-and-beyond.aspx"&gt;Take it to the MAX (and beyond)&lt;/a&gt;, and again in response to a number of questions that I sent him early on in this blog series when I was working on a large NUMA based server, &lt;a href="http://sqlblog.com/blogs/extended_events/archive/2010/12/08/session-memory-who-s-this-guy-named-max-and-what-s-he-doing-with-my-memory.aspx"&gt;Session memory – who’s this guy named Max and what’s he doing with my memory?&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;MEMORY_PARTITION_MODE&lt;/h2&gt;  &lt;p&gt;The MEMORY_PARTITION_MODE option specifies how the memory buffers for the Event Session are created and/or partitioned.&amp;#160; For servers with multiple processors and/or multiple NUMA nodes the memory buffers can become a bottleneck performance wise if multiple CPU’s are firing Events and have to wait on a memory buffer to buffer the Event information being collected.&amp;#160; There are three values for this option; NONE, PER_NODE, and PER_CPU.&amp;#160; &lt;/p&gt;  &lt;h3&gt;NONE &lt;/h3&gt;  &lt;p&gt;The NONE value specifies that a single set of memory buffers will be created for the Event Session.&amp;#160; In this configuration, three memory buffers are created for the Event Session, and the memory for the Event Session is divided evenly, to the nearest 64KB boundary, amongst the three memory buffers.&amp;#160; This is the &lt;strong&gt;default &lt;/strong&gt;value for an Event Session if the MEMORY_PARTITION_MODE is not explicitly defined.&lt;/p&gt;  &lt;h3&gt;PER_NODE&lt;/h3&gt;  &lt;p&gt;The PER_NODE value specifies that a separate set of three memory buffers will be created.&amp;#160; In this configuration, three memory buffers are created for each NUMA node that exists for the SQL Server Instance, and the memory is divided evenly, to the nearest 64KB boundary, amongst all of the memory buffers.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;h3&gt;PER_CPU&lt;/h3&gt;  &lt;p&gt;The PER_CPU value specifies that a set of memory buffers is created for each CPUs/Scheduler that is assigned to the SQL Server Instance.&amp;#160; In this configuration, the number of memory buffers is 2.5 times the number of CPUs/Schedulers available, and the memory is divided evenly, to the nearest 64KB boundary, amongst all of the memory buffers.&lt;/p&gt;  &lt;h2&gt;STARTUP_STATE&lt;/h2&gt;  &lt;p&gt;The STARTUP_STATE option specifies whether an Event Session automatically starts in an Active state when the SQL Server Instance starts up.&amp;#160; There are two valid values for this option, ON and OFF, with OFF being the &lt;strong&gt;default&lt;/strong&gt;.&lt;/p&gt;  &lt;h2&gt;TRACK_CAUSALITY&lt;/h2&gt;  &lt;p&gt;The TRACK_CAUSALITY option specifies whether causality tracking across multiple Events is turned ON or OFF.&amp;#160; The &lt;strong&gt;default&lt;/strong&gt; configuration for this option is OFF.&amp;#160; When TRACK_CAUSALITY is turned on, an additional Action, package0.attach_activity_id, is added to each Event that fires in the Event Session.&amp;#160; This Action is a combination GUID and sequence number that allows related Events to be tracked for cause and effect analysis of the Events that fired in the order in which they have fired.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;I should make note of the fact that in many cases, the options specified in the blog posts, may not be appropriate for a production implementation, and may have been made based on the fact that I just didn’t want to wait over multiple test cycles for Events to dispatch to the Targets.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>An XEvent a Day (25 of 31) – The Twelve Days of Christmas</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/25/an-xevent-a-day-25-of-31-the-twelve-days-of-christmas.aspx</link><pubDate>Sat, 25 Dec 2010 14:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31961</guid><dc:creator>jmkehayias</dc:creator><description>&lt;P&gt;&lt;STRONG&gt;Correction:&amp;nbsp; I mistakenly stated that Tim Mitchel had blogged the 12 days of&amp;nbsp;SQL Christmas, and was informed that Tim Ford is who wrote that blog post.&amp;nbsp; My sincerest apologies to Tim and Tim for the mix up.&amp;nbsp; The post has been corrected below.&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the spirit of today’s holiday, a couple of people have been posting SQL related renditions of holiday songs.&amp;nbsp; Tim Ford posted his &lt;A href="http://thesqlagentman.com/2010/12/on-the-12-days-of-sql-christmas/" target=_blank&gt;12 days of SQL Christmas&lt;/A&gt;, and Paul Randal and Kimberly Tripp went as far as to record themselves sing SQL Carols on their blog post &lt;A href="http://www.sqlskills.com/BLOGS/PAUL/post/Our-Christmas-Gift-To-You-Paul-and-Kimberly-Singing!.aspx"&gt;Our Christmas Gift To You: Paul and Kimberly Singing!&lt;/A&gt;&amp;nbsp; For today’s post on Extended Events I give you the 12 days of Christmas, Extended Events style (all of these are based on true facts about Extended Events in SQL Server).&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;On the first day of Christmas Extended Events gave to me: a chance to write a useful GUI. &lt;BR&gt;On the second day of Christmas Extended Events gave to me: two sqlserver packages. &lt;BR&gt;On the third day of Christmas Extended Events gave to me: three new DDL Commands. &lt;BR&gt;On the fourth day of Christmas Extended Events gave to me: four ETW channels. &lt;BR&gt;On the fifth day of Christmas Extended Events gave to me: five in-memory targets. &lt;BR&gt;On the sixth day of Christmas Extended Events gave to me: six keyword maps. &lt;BR&gt;On the seventh day of Christmas Extended Events gave to me: seven session options. &lt;BR&gt;On the eighth day of Christmas Extended Events gave to me: eight file io events. &lt;BR&gt;On the ninth day of Christmas Extended Events gave to me: nine database_log events. &lt;BR&gt;On the tenth day of Christmas Extended Events gave to me: ten new DMV’s. &lt;BR&gt;On the eleventh day of Christmas Extended Events gave to me: eleven Operational events. &lt;BR&gt;On the twelfth day of Christmas Extended Events gave to me: twelve sqlos Actions.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;</description></item><item><title>An XEvent a Day (24 of 31) – What is the package0.callstack Action?</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/24/an-xevent-a-day-24-of-31-what-is-the-callstack-Action.aspx</link><pubDate>Sat, 25 Dec 2010 02:00:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31958</guid><dc:creator>jmkehayias</dc:creator><description>&lt;P&gt;One of the actions inside of Extended Events is the package0.callstack and the only description provided by sys.dm_xe_objects for the object is 16-frame call stack.&amp;nbsp; If you look back at &lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/13/an-xevent-a-day-13-of-31-the-system-health-session.aspx" target=_blank&gt;The system_health Session&lt;/A&gt; blog post, you’ll notice that the package0.callstack Action has been added to a number of the Events that the PSS team thought were of significance to include in the Event Session.&amp;nbsp; We can trigger an event that will by logged by our system_health Event Session by raising an error of severity &amp;gt;=20 with the RAISERROR functionality in TSQL.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:green;"&gt;-- Generate a Severity 20 Error to trigger system_health
-- sqlserver.error_reported Event
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;RAISERROR&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;50001&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;20&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;1&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'This is an Error!'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;WITH &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;LOG&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_41E6BA97.png" target=_blank&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_2661B894.png" width=644 height=158&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;After raising the error, we can query the system_health Event Session for the callstacks that have been collected by adding into our XQuery a filter for the action node with the @name attribute = “callstack”&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;query&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'.'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;callstack
&lt;SPAN style="COLOR:blue;"&gt;FROM
&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;target_data &lt;SPAN style="COLOR:blue;"&gt;as xml&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;sys&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;dm_xe_sessions &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;s 
    &lt;SPAN style="COLOR:gray;"&gt;INNER JOIN &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;sys&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;dm_xe_session_targets &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;t
        &lt;SPAN style="COLOR:blue;"&gt;ON &lt;/SPAN&gt;s&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;address &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;t&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;event_session_address
    &lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;s&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;name &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'system_health'
      &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;AND &lt;/SPAN&gt;t&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;target_name &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'ring_buffer'
&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;src &lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;target_data&lt;SPAN style="COLOR:gray;"&gt;)
CROSS APPLY &lt;/SPAN&gt;target_data&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;nodes&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'RingBufferTarget/event/action[@name="callstack"]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;as &lt;/SPAN&gt;q&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;n&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;This will only return the action nodes for the callstack and the XML fragment will be similar to the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;    &lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;action &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;callstack&lt;/SPAN&gt;" &lt;SPAN style="COLOR:red;"&gt;package&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;package0&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;type &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;callstack&lt;/SPAN&gt;" &lt;SPAN style="COLOR:red;"&gt;package&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;package0&lt;/SPAN&gt;" &lt;SPAN style="COLOR:blue;"&gt;/&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;0x0000000001CD4F55
0x000000000113A310
0x0000000000BEA7D0
0x0000000001A3A0CC
0x0000000002FA3EAE
0x0000000000BC9616
0x0000000000BCABBB
0x0000000000BCA4D9
0x0000000000BCD10B
0x0000000000BC7C9B
0x0000000000B6163B
0x0000000000B612FA
0x0000000000B60E35
0x00000000010E0E50
0x00000000010E09A0
0x00000000010F9AB0&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
      &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;text &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;/&amp;gt;
    &amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;action&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;So what is it about this information that would make it important enough to collect?&amp;nbsp; The callstack provides the most recent 16 frames inside of the sqlservr process.&amp;nbsp; If you create a dump file of the sqlservr process using sqldumper.exe, you canopen the mdmp file up in windbg, load the public symbols for sql&amp;nbsp; Server, and then walk the stack with the ln &amp;lt;stack address&amp;gt; command.&amp;nbsp; For example the above callstack resolves in windbg as:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;(00000000`01cd4f10)&amp;nbsp;&amp;nbsp; sqlservr!GenericEvent::CallNextAction+0x45&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`01cd5000)&amp;nbsp;&amp;nbsp; sqlservr!AutoSpinlockHolder&amp;lt;170,1,1&amp;gt;::~AutoSpinlockHolder&amp;lt;170,1,1&amp;gt; &lt;BR&gt;(00000000`00b78be0)&amp;nbsp;&amp;nbsp; sqlservr!_chkstk+0xf276c&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00b78c30)&amp;nbsp;&amp;nbsp; sqlservr!IsWorktableRowset &lt;BR&gt;(00000000`00bea640)&amp;nbsp;&amp;nbsp; sqlservr!ErrorReportedAutoPublish::Publish+0x190&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00bea820)&amp;nbsp;&amp;nbsp; sqlservr!CErrorReportingManager::CwchCallFormatMessage &lt;BR&gt;(00000000`00b78be0)&amp;nbsp;&amp;nbsp; sqlservr!_chkstk+0x1bd96d&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00b78c30)&amp;nbsp;&amp;nbsp; sqlservr!IsWorktableRowset &lt;BR&gt;(00000000`02fa3800)&amp;nbsp;&amp;nbsp; sqlservr!CXStmtError::XretExecute+0x6ae&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`02fa44b0)&amp;nbsp;&amp;nbsp; sqlservr!CStmtDbcc::XretExecute &lt;BR&gt;(00000000`00bc8f80)&amp;nbsp;&amp;nbsp; sqlservr!CMsqlExecContext::ExecuteStmts&amp;lt;1,1&amp;gt;+0x55a&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00bc9e30)&amp;nbsp;&amp;nbsp; sqlservr!CSessionTaskProxy::AddRef &lt;BR&gt;(00000000`00bca630)&amp;nbsp;&amp;nbsp; sqlservr!CMsqlExecContext::FExecute+0x58b&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00bcad60)&amp;nbsp;&amp;nbsp; sqlservr!CExecParamTblHelperForExecParamTable::`vftable' &lt;BR&gt;(00000000`00bca1c0)&amp;nbsp;&amp;nbsp; sqlservr!CSQLSource::Execute+0x319&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00bca630)&amp;nbsp;&amp;nbsp; sqlservr!CMsqlExecContext::FExecute &lt;BR&gt;(00000000`00bcd1a0)&amp;nbsp;&amp;nbsp; sqlservr!process_request+0x370&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00bcd6c0)&amp;nbsp;&amp;nbsp; sqlservr!CAutoSetupCXCtxtS::~CAutoSetupCXCtxtS &lt;BR&gt;(00000000`00bc7990)&amp;nbsp;&amp;nbsp; sqlservr!process_commands+0x2b2&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00bc7c10)&amp;nbsp;&amp;nbsp; sqlservr!CConnection::PNetConn &lt;BR&gt;(00000000`00b61520)&amp;nbsp;&amp;nbsp; sqlservr!SOS_Task::Param::Execute+0x11b&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00b616f0)&amp;nbsp;&amp;nbsp; sqlservr!Worker::Reset &lt;BR&gt;(00000000`00b61230)&amp;nbsp;&amp;nbsp; sqlservr!SOS_Scheduler::RunTask+0xca&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00b61520)&amp;nbsp;&amp;nbsp; sqlservr!SOS_Task::Param::Execute &lt;BR&gt;(00000000`00b60da0)&amp;nbsp;&amp;nbsp; sqlservr!SOS_Scheduler::ProcessTasks+0x95&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`00b61090)&amp;nbsp;&amp;nbsp; sqlservr!WorkDispatcher::DequeueTask &lt;BR&gt;(00000000`010e0d40)&amp;nbsp;&amp;nbsp; sqlservr!SchedulerManager::WorkerEntryPoint+0x110&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`010e0ea0)&amp;nbsp;&amp;nbsp; sqlservr!SOSQueueCounted&amp;lt;Worker,0&amp;gt;::Dequeue &lt;BR&gt;(00000000`010e0940)&amp;nbsp;&amp;nbsp; sqlservr!SystemThread::RunWorker+0x60&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`010e0a10)&amp;nbsp;&amp;nbsp; sqlservr!SchedulerManager::AcquireWorker &lt;BR&gt;(00000000`010f9980)&amp;nbsp;&amp;nbsp; sqlservr!SystemThreadDispatcher::ProcessWorker+0x12c&amp;nbsp;&amp;nbsp; |&amp;nbsp; (00000000`010f9b00)&amp;nbsp;&amp;nbsp; sqlservr!SEList&amp;lt;SystemThread,112&amp;gt;::Head&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_707CC379.png" target=_blank&gt;&lt;IMG style="BORDER-BOTTOM:0px;BORDER-LEFT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;" title=image border=0 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_7D0A7095.png" width=644 height=315&gt;&lt;/A&gt; &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;This information isn’t really of much use unless you have access to or understand the SQL Server Source code.&amp;nbsp; In the event that you have an issue, the PSS team can create a memory dump of the process, collect the output from the ring_buffer target, and walk the stack to see what lead to the Event firing. &lt;/P&gt;
&lt;P&gt;It is possible to materialize the stack without having to actually perform a memory dump and without using windbg.&amp;nbsp; In the SQLCAT team blog post &lt;A href="http://blogs.msdn.com/b/sqlcat/archive/2010/05/11/resolving-dtc-related-waits-and-tuning-scalability-of-dtc.aspx"&gt;Resolving DTC Related Waits and Tuning Scalability of DTC&lt;/A&gt;, Trace Flag 3656 is documented as materializing the callstack if the sqlservr.pdb symbols file exists in the same directory as sqlservr.exe.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;NOTE: There is a reason that this functionality is not turned on by default in SQL Server.&amp;nbsp; It is not recommended that you enable this Trace Flag on a production server unless directed to do so by PSS as a part of a support case.&amp;nbsp; This Trace Flag can impact performance and should not be used lightly.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;In SQL Server 2008, the symbols file is not included by default in the product.&amp;nbsp; To get the symbols file, you can use windbg and a memory dump.&amp;nbsp; For steps on how to do this, see &lt;A title=http://blogs.msdn.com/b/askjay/archive/2009/12/29/basic-debugging-concepts-and-setup.aspx href="http://blogs.msdn.com/b/askjay/archive/2009/12/29/basic-debugging-concepts-and-setup.aspx"&gt;http://blogs.msdn.com/b/askjay/archive/2009/12/29/basic-debugging-concepts-and-setup.aspx&lt;/A&gt;.&amp;nbsp; Once you open the memory dump file for the first time, the symbols are downloaded from the public symbols server and placed in the .sympath specified, in the case of the blog post mentioned it will be C:\symbols\public\sq\sqlservr.pdb\1E7168D2F78B4FBA911F507689D7DE902.&amp;nbsp; After copying the pdb to the Binn folder for the SQL instance, by default C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Binn, we can turn on the trace flag and requery our Event Session.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:green;"&gt;--Trace flag 3656 enables the call stacks to be resolved.  This requires that the 
--sqlservr.pdb file reside in the same directory as sqlservr.exe
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;DBCC &lt;/SPAN&gt;TRACEON &lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;3656&lt;SPAN style="COLOR:gray;"&gt;, -&lt;/SPAN&gt;1&lt;SPAN style="COLOR:gray;"&gt;)  
&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;GO
SELECT &lt;/SPAN&gt;n&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;query&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'.'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;callstack
&lt;SPAN style="COLOR:blue;"&gt;FROM
&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;target_data &lt;SPAN style="COLOR:blue;"&gt;as xml&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)
    &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;FROM &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;sys&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;dm_xe_sessions &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;s 
    &lt;SPAN style="COLOR:gray;"&gt;INNER JOIN &lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;sys&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:green;"&gt;dm_xe_session_targets &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;t
        &lt;SPAN style="COLOR:blue;"&gt;ON &lt;/SPAN&gt;s&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;address &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;t&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;event_session_address
    &lt;SPAN style="COLOR:blue;"&gt;WHERE &lt;/SPAN&gt;s&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;name &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'system_health'
      &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;AND &lt;/SPAN&gt;t&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;target_name &lt;SPAN style="COLOR:gray;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'ring_buffer'
&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS &lt;/SPAN&gt;src &lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;target_data&lt;SPAN style="COLOR:gray;"&gt;)
CROSS APPLY &lt;/SPAN&gt;target_data&lt;SPAN style="COLOR:gray;"&gt;.&lt;/SPAN&gt;nodes&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'RingBufferTarget/event/action[@name="callstack"]'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;as &lt;/SPAN&gt;q&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;n&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The output of our callstack action is now:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;action &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;callstack&lt;/SPAN&gt;" &lt;SPAN style="COLOR:red;"&gt;package&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;package0&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;type &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;callstack&lt;/SPAN&gt;" &lt;SPAN style="COLOR:red;"&gt;package&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;package0&lt;/SPAN&gt;" &lt;SPAN style="COLOR:blue;"&gt;/&amp;gt;
  &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;GenericEvent::CallNextAction+45 [ @ 0+0x0
_chkstk+f276c [ @ 0+0x0
ErrorReportedAutoPublish::Publish+190 [ @ 0+0x0
_chkstk+1bd96d [ @ 0+0x0
CXStmtError::XretExecute+6ae [ @ 0+0x0
CMsqlExecContext::ExecuteStmts&lt;SPAN style="COLOR:red;"&gt;&amp;amp;lt;&lt;/SPAN&gt;1,1&lt;SPAN style="COLOR:red;"&gt;&amp;amp;gt;&lt;/SPAN&gt;+55a [ @ 0+0x0
CMsqlExecContext::FExecute+58b [ @ 0+0x0
CSQLSource::Execute+319 [ @ 0+0x0
process_request+370 [ @ 0+0x0
process_commands+2b2 [ @ 0+0x0
SOS_Task::Param::Execute+11b [ @ 0+0x0
SOS_Scheduler::RunTask+ca [ @ 0+0x0
SOS_Scheduler::ProcessTasks+95 [ @ 0+0x0
SchedulerManager::WorkerEntryPoint+110 [ @ 0+0x0
SystemThread::RunWorker+60 [ @ 0+0x0
SystemThreadDispatcher::ProcessWorker+12c [ @ 0+0x0&lt;SPAN style="COLOR:blue;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;value&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;
  &amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;text &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;/&amp;gt;
&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR:#a31515;"&gt;action&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;If you note, these match up to the stack output from windbg.&amp;nbsp; If you are interested in trying to figure out the internal stack of SQL Server, the package0.callstack event can certainly be useful, but in general it is not something that you will get much use of in general troubleshooting with Extended Events.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/image_0616FC17.png"&gt;&lt;/A&gt;&lt;/P&gt;</description></item><item><title>An XEvent a Day (23 of 31) – How it Works – Multiple Transaction Log Files</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/23/an-xevent-a-day-23-of-31-how-it-works-multiple-transaction-log-files.aspx</link><pubDate>Thu, 23 Dec 2010 19:48:54 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:31927</guid><dc:creator>jmkehayias</dc:creator><description>&lt;p&gt;While working on yesterday’s blog post &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/22/an-xevent-a-day-22-of-31-the-future-fn-dblog-no-more-tracking-transaction-log-activity-in-denali.aspx"&gt;The Future – fn_dblog() No More? Tracking Transaction Log Activity in Denali&lt;/a&gt; I did a quick Google search to find a specific blog post by Paul Randal to use it as a reference, and in the results returned another blog post titled, &lt;a href="http://feedproxy.google.com/~r/SQLServerpedia_texastoo/~3/87aHM2uQrRc/post.aspx"&gt;Investigating Multiple Transaction Log Files in SQL Server&lt;/a&gt; caught my eye so I opened it in a new tab in IE and went about finishing the blog post.&amp;#160; It probably wouldn’t have gotten my attention if it hadn’t been on the &lt;a href="http://sqlserverpedia.com/" target="_blank"&gt;SqlServerPedia&lt;/a&gt; site.&amp;#160; When I was finished I went back and read through the post, and I found that some of the information presented in it was incorrect, so I attempted to post a comment, and not surprisingly the blog had moderation controls turned on, I have it turned on here if you aren’t a SQLBlog member so I don’t have a problem with that necessarily, and the comment didn’t show up on the site.&lt;/p&gt;  &lt;p&gt;Interestingly enough, yesterday SQL Server Central had an editorial by Tim Mitchell titled &lt;a href="http://www.sqlservercentral.com/articles/Editorial/71897/" target="_blank"&gt;Calling Out Bad Advice&lt;/a&gt; that discussed the problem of bad information on the internet and how to go about calling people out for publishing bad advice.&amp;#160; Lets face it, people are human, at least I am, and mistakes happen from time to time, either through our own misunderstandings of our personal experiences and what we perceived from the information we had, or by shear accident in some cases.&amp;#160; This afternoon I got an email back from the blog post author and we traded a few emails about the post, and in the end the author made changes to the original post which have been syndicated to SQLServerPedia already, so to see the original you have do something like look at the &lt;a href="http://webcache.googleusercontent.com/search?q=cache:QJhzbbSajqMJ:sqlserverpedia.com/blog/sql-server-bloggers/investigating-multiple-transaction-log-files-in-sql-server/+http://sqlserverpedia.com/blog/sql-server-bloggers/investigating-multiple-transaction-log-files-in-sql-server/&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=us" target="_blank"&gt;Google Cached Copy&lt;/a&gt;.&amp;#160; The author also posted a follow up blog post today on the subject.&lt;/p&gt;  &lt;p&gt;So why this blog post?&amp;#160; Well even with the corrections, some of the conclusions are still wrong.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_3D7270F9.png"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_48BB8536.png" width="644" height="249" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I am not trying to knock this guy for what he saw or perceived from the information he collected, but 2, 3 and 4 are still incorrect.&amp;#160; What’s great is we can prove this by using Extended Events in SQL Server 2008 and that is what the real purpose behind this blog post is.&amp;#160; To set things up, we first need to create a database that roughly matches the available information shown in the pictures of the original blog post.&amp;#160; The database will have a single database file, that I am sizing initially at 128MB and will have a fixed autogrowth value of 64MB.&amp;#160; The database will have four log files that are initially sized at 1MB each, and the first log file will have a fixed autogrowth value of 32MB, with the last three transaction log files having fixed growth values of just 1MB.&amp;#160; Don’t comment on this configuration, I understand completely that there is no reason to create multiple log files on the same disk array (half the purpose behind this post is to show that there is benefit to having multiple log files like this, which is also the intended purpose behind the original blog post as well), and I wouldn’t do this in production, but it works perfectly for the tests that we are about to run.&amp;#160; Once the database is created, we’ll switch to that database, and dump out the transaction log VLF information using DBCC LOGINFO.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Create our Test database with
--        1 data file sized at 128MB with 64MB autogrowth
--        1 log file sized at 1MB with 32MB autogrowth
--        3 log files sized at 1MB with 1MB autogrowth
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;[Test] &lt;span style="color:blue;"&gt;ON  
PRIMARY 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(    
        &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'Test'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'D:\SQLData\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test.mdf'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;131072KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;65536KB
    &lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:magenta;"&gt;LOG &lt;/span&gt;&lt;span style="color:blue;"&gt;ON 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;(    
        &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'Test_log'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'L:\SQLData\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log.ldf'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;131072KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;32768KB
    &lt;span style="color:gray;"&gt;), 
    (    
        &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'Test_log2'&lt;/span&gt;&lt;span style="color:gray;"&gt;,     
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'L:\SQLData\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log2.ldf'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;131072KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;), 
    ( 
        &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'Test_log3'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'L:\SQLData\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log3.ldf'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;131072KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;), 
    ( 
        &lt;/span&gt;NAME &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'Test_log4'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'L:\SQLData\MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log4.ldf'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;SIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;MAXSIZE &lt;span style="color:gray;"&gt;= &lt;/span&gt;131072KB&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;FILEGROWTH &lt;span style="color:gray;"&gt;= &lt;/span&gt;1024KB 
    &lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Switch to our Test database
&lt;/span&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;[Test]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Dump the VLF Usage information
&lt;/span&gt;&lt;span style="color:blue;"&gt;DBCC &lt;/span&gt;LOGINFO
&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_1342C311.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_79DABFD6.png" width="417" height="361" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Each of the log files VLF’s have been highlighted in a different color above to point out the separation of the four different files.&amp;#160; Note that the active VLF is in the first log file, FileId=2, as shown by the Status=2.&amp;#160; With our test database created, we can now set out to create the Extended Events Event Session that:&lt;/p&gt;

&lt;ol&gt;
  &lt;ol&gt;
    &lt;li&gt;The transaction logs are written to sequentially starting with the first VLF in FileId=2 and then when the last VLF in FileId=2 is full, the log begins writing log records to the first VLF of FileId=3 and when the last VLF in FileId=3 is full, the log begins writing log records to the first VLF of FileId=4 and when the last VLF in FileId=4 is full, the log begins writing log records to the first VLF of FileId=5 and when the last VLF in FileId=5 is full, the log circles back to the first VLF of FileId=2 which will still be active because we are going to work within a single explicit transaction for the duration of the test.&amp;#160; Since the file is full it has to be grown, and because it has a growth factor of 32MB it grows by 32MB and begins writing log records to the first VLF of the newly allocated space. &lt;/li&gt;

    &lt;li&gt;The writes to the log files do not happen at the same time, they occur sequentially as the engine writes log records into each file, filling the VLF’s and has to move to the next file, or circle back to the beginning of the log when it reaches the end of the last log file. &lt;/li&gt;

    &lt;li&gt;Whatever results were seen in the original thread by opening the log file with Apex tools were incorrect and misleading to the original poster, since log files were actually written to all of the files during the operation.&amp;#160; I have a couple of theories as to what could have happened that made the Apex tool show no log records that I will discuss later in this thread. &lt;/li&gt;
  &lt;/ol&gt;
&lt;/ol&gt;

&lt;p&gt;What Events would we want to capture to look at what is happening in our transaction log files when running the same workload from the original post?&amp;#160; Since we are going to be executing a number of statements, the sqlserver.sql_statement_starting and sqlserver.sql_statement_completed Events seem like a good starting point, and since we want to know what statement was executing, we’ll add the sql_text Action to these Events.&amp;#160; Since we are dealing with the transaction log files, the sqlserver.databases_log_file_size_changed, sqlserver.databases_log_file_used_size_changed, sqlserver.databases_log_flush_wait, sqlserver.databases_log_flush, sqlserver.databases_log_growth, and sqlserver.databases_log_truncation Events should probably be included to so we can track what’s going on with our log specifically, and to ensure that these Events only fire for our test database, we’ll dynamically build in a Predicate on the sqlserver.database_id Predicate source using the output of DB_ID() inside the testing database.&amp;#160; &lt;/p&gt;

&lt;p&gt;Since the log is a file, we also will want to collect the file operation related events such as sqlserver.flush_file_buffers, sqlserver.file_read, sqlserver.file_written, sqlserver.file_read_completed, and sqlserver.file_write_completed, and we’ll dynamically set a database_id Predicate on these Events as well.&amp;#160; If you recall back to Friday of last week, I talked about a number of trace flags that provide further information about Backup, Restore and file operations in my blog post &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/12/17/an-xevent-a-day-17-of-31-a-look-at-backup-internals-and-how-to-track-backup-and-restore-throughput-part-1.aspx"&gt;A Look at Backup Internals and How to Track Backup and Restore Throughput (Part 1)&lt;/a&gt;.&amp;#160; One of those was Trace Flag 3004, which writes file zeroing information to the trace print output whenever a zeroing operation occurs.&amp;#160; I previously used this trace flag in my blog post &lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/archive/2010/05/13/does-the-tempdb-log-file-get-zero-initialized-at-startup.aspx"&gt;Does the tempdb Log file get Zero Initialized at Startup?&lt;/a&gt;&amp;#160; Since the log files grew in the original tests, we can turn this trace flag on to track the file growths, and use the sqlserver.trace_print Event to capture the file operation messages, and to keep this Event focused to our tests only, we’ll dynamically set a Predicate for the current session_id using the sqlserver.session_id Predicate Source and the output of @@SPID.&amp;#160; Finally since this is all happening inside of an explicit transaction, we’ll also capture the sqlserver.database_transaction_begin and sqlserver.database_transaction_end events for the current database_id.&lt;/p&gt;

&lt;p&gt;We have quite a large list of Events associated with this Event Session, and to ensure that we can perform analysis over all of the Event data from our tests, we’ll use the package0.asynchronous_file_target to hold our Event information.&amp;#160; We’ll also increase our buffer memory from the default 4MB to 8MB and set the Event Session up to ALLOW_SINGLE_EVENT_LOSS, which does exactly what it sounds like it does, and to correlate cause and effect we’ll also turn TRACK_CAUSALITY to ON for the session.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Create our Event Session dynamically
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@sqlcmd &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;2000&lt;span style="color:gray;"&gt;) = &lt;/span&gt;&lt;span style="color:red;"&gt;'
CREATE EVENT SESSION TransactionLogUsage
ON SERVER
--ADD EVENT sqlserver.sql_statement_starting
--( ACTION(sqlserver.sql_text)
--  WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
--ADD EVENT sqlserver.sql_statement_completed
--( ACTION(sqlserver.sql_text)
--  WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.databases_log_file_size_changed
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.databases_log_file_used_size_changed
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.databases_log_flush_wait
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.databases_log_flush
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.databases_log_growth
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.databases_log_truncation
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.flush_file_buffers
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.file_read
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.file_written
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.file_read_completed
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.file_write_completed
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.trace_print
(   WHERE (sqlserver.session_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;@@SPID &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.database_transaction_begin
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;')),
ADD EVENT sqlserver.database_transaction_end
( WHERE (sqlserver.database_id = '&lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;cast&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;3&lt;span style="color:gray;"&gt;))+&lt;/span&gt;&lt;span style="color:red;"&gt;'))
ADD TARGET package0.asynchronous_file_target(
     SET filename=''C:\SQLBlog\TransactionLogUsage.xel'',
         metadatafile=''C:\SQLBlog\TransactionLogUsage.xem'')
WITH (MAX_MEMORY = 8MB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, TRACK_CAUSALITY = ON )'
&lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@sqlcmd&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;If you notice above, I have commented out the sqlserver.sql_statement_starting and sqlserver.sql_statement_completed Events in the Event Session.&amp;#160; It turns out that these two events are not needed in the Event Session to prove the points being made in this blog post.&amp;#160; Including these two events makes the time to process the 240K+ Events run in the 10-15 minute range on my 16 core test server, so its not likely something that you are going to do on a laptop VM, but they were included in my initial Event Session for this, and I wanted to show the thought process I followed to get from A to B and ultimately C.&lt;/p&gt;

&lt;p&gt;With our Event Session created, we can finish setting up our environment to run the actual tests.&amp;#160; To do this we’ll create a table named LogTable with two columns that are, as best as I can tell from the limited information provided about the test table, the same as the table used in the original post.&amp;#160; We’ll then CHECKPOINT the database to cause log truncation to occur (you did create the database in SIMPLE recovery right?), turn on Trace Flag 3004 for our session, and then start the Event Session so that it collects the data from our Events during our test.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Create our Test Table
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;LogTable &lt;span style="color:gray;"&gt;(&lt;/span&gt;RowID &lt;span style="color:blue;"&gt;decimal&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;,&lt;/span&gt;4&lt;span style="color:gray;"&gt;), &lt;/span&gt;Data &lt;span style="color:blue;"&gt;char&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;1024&lt;span style="color:gray;"&gt;))
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Checkpoint the database to truncate and clear the log.
&lt;/span&gt;&lt;span style="color:blue;"&gt;CHECKPOINT
GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Turn on Trace Flag 3004 so we can see file zeroing ops.
&lt;/span&gt;&lt;span style="color:blue;"&gt;DBCC &lt;/span&gt;TRACEON&lt;span style="color:gray;"&gt;(&lt;/span&gt;3004&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Start the Event Session
&lt;/span&gt;&lt;span style="color:blue;"&gt;ALTER EVENT SESSION &lt;/span&gt;TransactionLogUsage
&lt;span style="color:blue;"&gt;ON SERVER
STATE&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;START
&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;With the Event Session started and all our setup work completed we can now run the test script that was used in the original post to generate our test workload.&amp;#160; When the tests complete, we’ll dump out our VLF information again with DBCC LOGINFO, then ROLLBACK the transaction, switch to master and DROP our test database and the Extended Events Session from the server since they are no longer needed.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Run our tests
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET NOCOUNT ON

DECLARE &lt;/span&gt;@cnt &lt;span style="color:blue;"&gt;decimal&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;10&lt;span style="color:gray;"&gt;,&lt;/span&gt;4&lt;span style="color:gray;"&gt;)=&lt;/span&gt;0
&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@rows &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;=&lt;/span&gt;0
&lt;span style="color:blue;"&gt;BEGIN TRAN
WHILE &lt;/span&gt;1&lt;span style="color:gray;"&gt;=&lt;/span&gt;1
&lt;span style="color:blue;"&gt;BEGIN
    INSERT INTO &lt;/span&gt;LogTable &lt;span style="color:blue;"&gt;VALUES &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;ROUND&lt;/span&gt;&lt;span style="color:gray;"&gt;((&lt;/span&gt;&lt;span style="color:magenta;"&gt;RAND&lt;/span&gt;&lt;span style="color:gray;"&gt;()* &lt;/span&gt;1000000&lt;span style="color:gray;"&gt;),&lt;/span&gt;0&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:magenta;"&gt;SPACE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;1024&lt;span style="color:gray;"&gt;))
    
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;@rows&lt;span style="color:gray;"&gt;+=&lt;/span&gt;1
        
    &lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;@cnt &lt;span style="color:gray;"&gt;= (&lt;/span&gt;size &lt;span style="color:gray;"&gt;* &lt;/span&gt;1.0 &lt;span style="color:gray;"&gt;* &lt;/span&gt;8.0&lt;span style="color:gray;"&gt;)/&lt;/span&gt;1024.0 
    &lt;span style="color:blue;"&gt;FROM  &lt;/span&gt;Test&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;database_files
    &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;data_space_id &lt;span style="color:gray;"&gt;= &lt;/span&gt;0
    &lt;span style="color:gray;"&gt;AND &lt;/span&gt;[FILE_ID]&lt;span style="color:gray;"&gt;=&lt;/span&gt;5
    
    &lt;span style="color:blue;"&gt;IF &lt;/span&gt;@cnt&lt;span style="color:gray;"&gt;&amp;gt;&lt;/span&gt;1.0
            &lt;span style="color:blue;"&gt;BREAK
END

SELECT &lt;/span&gt;@rows&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Pull Log VLF usage again
&lt;/span&gt;&lt;span style="color:blue;"&gt;DBCC &lt;/span&gt;LOGINFO
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Rollback our transaction
&lt;/span&gt;&lt;span style="color:blue;"&gt;ROLLBACK
GO
USE master
GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Kill any connection to Test database
&lt;/span&gt;&lt;span style="color:blue;"&gt;ALTER DATABASE &lt;/span&gt;[Test] &lt;span style="color:blue;"&gt;SET SINGLE_USER WITH ROLLBACK IMMEDIATE&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Drop the Test database
&lt;/span&gt;&lt;span style="color:blue;"&gt;DROP DATABASE &lt;/span&gt;[Test]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Drop the Event Session
&lt;/span&gt;&lt;span style="color:blue;"&gt;DROP EVENT SESSION &lt;/span&gt;TransactionLogUsage
&lt;span style="color:blue;"&gt;ON SERVER
GO&lt;/span&gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image3_796E8CE1.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:block;float:none;border-top-width:0px;border-bottom-width:0px;margin-left:auto;border-left-width:0px;margin-right:auto;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image3_thumb_790259EC.png" width="355" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;There is a reason that I dump out the VLF information before performing the ROLLBACK of the transaction.&amp;#160; As long as the transaction remains active, the VLF’s containing the active transaction can not be truncated and cleared.&amp;#160; In order to see the allocated VLF’s, we need the transaction active still.&amp;#160; Once again, I have highlighted each of the individual log files separately, and from the DBCC LOGINFO output we can look at the FileId and Status columns and see that our transaction log wrote information into all 4 of the files, filling them, and the wrapped back to the first file which had to be grown, and each of the subsequent log files were also grown by the database engine.&amp;#160; However, if you look at the CreateLSN information for the growth portion of each log file, you will notice that each file has its own Create LSN value for the second set of VLF’s, meaning that they were grown separately and at different times.&amp;#160; Still not convinced by DBCC LOGINFO?&amp;#160; Well we have the data to validate this and prove it unequivocally, but before we can look at the data, we need to retrieve it from the asynchronous_file_target files and shred the XML using XQuery.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Create our Analysis Database
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;TLogUsageTestResults
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Switch to our Analysis Database
&lt;/span&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;[TLogUsageTestResults]
&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:green;"&gt;-- Create intermediate temp table for raw event data
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;RawEventData
&lt;span style="color:gray;"&gt;(&lt;/span&gt;Rowid &lt;span style="color:blue;"&gt;int identity primary key&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;event_data &lt;span style="color:blue;"&gt;xml&lt;/span&gt;&lt;span style="color:gray;"&gt;)

&lt;/span&gt;&lt;span style="color:green;"&gt;-- Create final results table for parsed event data
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;TestResults
&lt;span style="color:gray;"&gt;(&lt;/span&gt;[Rowid] &lt;span style="color:blue;"&gt;int primary key&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[event_name] &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;50&lt;span style="color:gray;"&gt;), &lt;/span&gt;[package_name] &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;50&lt;span style="color:gray;"&gt;),
 &lt;/span&gt;[timestamp] &lt;span style="color:blue;"&gt;datetime2&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[count] &lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[increment] &lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[database_id] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[mode] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[file_handle] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[offset] &lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[file_id] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[file_group_id] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[path] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[duration] &lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[io_data] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[succeeded] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[sql_text] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), 
 &lt;/span&gt;[trace_message] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[source_database_id] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[object_id] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[object_type] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[cpu] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[reads] &lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[writes] &lt;span style="color:blue;"&gt;bigint&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[state] &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;4000&lt;span style="color:gray;"&gt;), &lt;/span&gt;[offset_end] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[nest_level] &lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[activity_id] &lt;span style="color:blue;"&gt;uniqueidentifier&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;[event_sequence] &lt;span style="color:blue;"&gt;int &lt;/span&gt;&lt;span style="color:gray;"&gt;)

&lt;/span&gt;&lt;span style="color:green;"&gt;-- Read the file data into intermediate temp table
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;RawEventData &lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data &lt;span style="color:blue;"&gt;AS XML&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_data
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;fn_xe_file_target_read_file&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'C:\SQLBlog\TransactionLogUsage*.xel'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                                     &lt;/span&gt;&lt;span style="color:red;"&gt;'C:\SQLBlog\TransactionLogUsage*.xem'&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
                                     null, null)

&lt;/span&gt;&lt;span style="color:green;"&gt;-- Query the Event data from the Target.
&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;TestResults
&lt;span style="color:gray;"&gt;(&lt;/span&gt;[Rowid]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[event_name]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[database_id]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[count]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[increment]&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[mode]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[file_handle]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[offset]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[file_id]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[file_group_id]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[path]&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[duration]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[io_data]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[succeeded]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[sql_text]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[trace_message]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[source_database_id]&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[object_id]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[object_type]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[cpu]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[reads]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[writes]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[state]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[offset_end]&lt;span style="color:gray;"&gt;, 
 &lt;/span&gt;[nest_level]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[activity_id]&lt;span style="color:gray;"&gt;, &lt;/span&gt;[event_sequence]&lt;span style="color:gray;"&gt;)

&lt;/span&gt;&lt;span style="color:green;"&gt;-- Fetch the Event Data from the Event Session Target
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;RowID&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@name)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, 
            &lt;/span&gt;&lt;span style="color:magenta;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;hh&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;GETUTCDATE&lt;/span&gt;&lt;span style="color:gray;"&gt;(), &lt;/span&gt;&lt;span style="color:magenta;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
            &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/@timestamp)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'datetime2'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;COALESCE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;), 
             &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;)) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;count&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[count]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;increment&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[increment]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;mode&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[mode]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;file_handle&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[file_handle]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;offset&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[offset]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;file_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[file_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;file_group_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[file_group_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;path&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[path]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;duration&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[duration]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;io_data&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[io_data]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;succeeded&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[succeeded]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;sql_text&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[sql_text]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;message&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[trace_message]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;source_database_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[source_database_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;object_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[object_id]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;object_type&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[object_type]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;cpu&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[cpu]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;reads&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[reads]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;writes&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'bigint'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[writes]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;state&amp;quot;]/text)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'nvarchar(4000)'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[state]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;offset_end&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[offset_end]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/data[@name=&amp;quot;nest_level&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'int'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;[nest_level]&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;1&lt;span style="color:gray;"&gt;, &lt;/span&gt;36&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS uniqueidentifier&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;activity_id&lt;span style="color:gray;"&gt;,
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;event_data&lt;span style="color:gray;"&gt;.&lt;/span&gt;value&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(event/action[@name=&amp;quot;attach_activity_id&amp;quot;]/value)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(50)'&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;38&lt;span style="color:gray;"&gt;, &lt;/span&gt;10&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS int&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;event_sequence
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;RawEventData
&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;Rowid
&lt;span style="color:blue;"&gt;GO

&lt;/span&gt;&lt;span style="color:green;"&gt;-- Return our results
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* 
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;TestResults
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;event_name &lt;span style="color:gray;"&gt;NOT IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'sql_statement_starting' &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'sql_statement_completed'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;RowID&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;If you scroll through the results you can see the writes occurring sequentially through each of the log files, and while FileId=4 is being written to, the Database Engine begins the growth of FileId=2 by 32MB.&amp;#160; If we change our query to only focus on the file_write_completed, databases_log_growth, and trace_print Events, we can see this a little easier.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;-- Return our results
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT 
    &lt;/span&gt;Rowid&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;event_name&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;[timestamp]&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;[count]&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;database_id&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;mode&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;offset&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;file_id&lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;duration&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;trace_message 
&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;TestResults
&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;event_name  &lt;span style="color:gray;"&gt;IN (&lt;/span&gt;&lt;span style="color:red;"&gt;'file_write_completed' &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'databases_log_growth'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'trace_print'&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;RowID&lt;/pre&gt;
  &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/blockquote&gt;

&lt;p align="center"&gt;
  &lt;table&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_7176EA7F.png" target="_blank"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_1EF80A43.png" width="324" height="120" /&gt;&lt;/a&gt; &lt;/td&gt;

        &lt;td&gt;&amp;#160;&amp;#160; &lt;/td&gt;

        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_7E70CA90.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_7E04979B.png" width="324" height="120" /&gt;&lt;/a&gt; &lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;Log Rollover from Log1 to Log2&lt;/strong&gt;&lt;/td&gt;

        &lt;td&gt;&amp;#160;&lt;/td&gt;

        &lt;td&gt;&lt;strong&gt;Log Rollover from Log2 to Log3&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
&lt;/p&gt;

&lt;p align="left"&gt;&amp;#160;&lt;/p&gt;

&lt;p align="center"&gt;
  &lt;table&gt;
      &lt;tr&gt;
        &lt;td&gt;
          &lt;p&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_7D9864A6.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_6430616C.png" width="324" height="93" /&gt;&lt;/a&gt; &lt;/p&gt;
        &lt;/td&gt;

        &lt;td&gt;&amp;#160;&amp;#160; &lt;/td&gt;

        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_63C42E77.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_6357FB82.png" width="324" height="120" /&gt;&lt;/a&gt; &lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;Autogrow of Log1&lt;/strong&gt;&lt;/td&gt;

        &lt;td&gt;&amp;#160;&lt;/td&gt;

        &lt;td&gt;&lt;strong&gt;Log Rollover from Log3 to Log4&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
&lt;/p&gt;

&lt;p align="left"&gt;&amp;#160;&lt;/p&gt;

&lt;p align="center"&gt;
  &lt;table&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_7BE798D2.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_4D8E1325.png" width="324" height="119" /&gt;&lt;/a&gt;&lt;/td&gt;

        &lt;td&gt;&amp;#160;&amp;#160; &lt;/td&gt;

        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_4D21E030.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_4CB5AD3B.png" width="324" height="95" /&gt;&lt;/a&gt; &lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;Log Rollover from Log4 back to Log1&lt;/strong&gt;&lt;/td&gt;

        &lt;td&gt;&amp;#160;&lt;/td&gt;

        &lt;td&gt;&lt;strong&gt;Autogrow of Log2&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div align="center"&gt;
  &lt;table&gt;
      &lt;tr&gt;
        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_4C497A46.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_4BDD4751.png" width="324" height="93" /&gt;&lt;/a&gt; &lt;/td&gt;

        &lt;td&gt;&amp;#160;&amp;#160; &lt;/td&gt;

        &lt;td&gt;&lt;a href="http://sqlblog.com/blogs/jonathan_kehayias/image_606296CF.png" target="_blank"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://sqlblog.com/blogs/jonathan_kehayias/image_thumb_4B04E167.png" width="324" height="93" /&gt;&lt;/a&gt; &lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;&lt;strong&gt;Autogrow of Log3&lt;/strong&gt;&lt;/td&gt;

        &lt;td&gt;&amp;#160;&lt;/td&gt;

        &lt;td&gt;&lt;strong&gt;Autogrow of Log4&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/table&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;br /&gt;We can see the first log file, FileID=2, grows before the log rollover from Log3, FileID=4, occurs to Log4, FileID=5, making space available in the first log file for the rollover when FileID=5 becomes full.&amp;#160; Log records are written all four of the log files before the log wraps back around to the first log file, debunking point numbers two and four of the conclusion.&amp;#160; The timestamps of the events shows that the additional log files are written to serially and not at the same time debunking point number three of the conclusion.&amp;#160; The reason that only a fraction of the log records are written to the three additional log files is proportionate to the difference in the autogrowth settings between the first log file at 32MB and the three additional log files at 1MB.&amp;#160; If the first log file was set to grow at 1MB, the majority of the log records would not be in the first log file.&lt;/p&gt;

&lt;p&gt;Its been well documented that there is no performance benefit to having multiple log files in a database, and Paul Randal’s blog post, &lt;a href="http://www.sqlskills.com/BLOGS/PAUL/post/Importance-of-proper-transaction-log-size-management.aspx"&gt;Importance of proper transaction log size management&lt;/a&gt;, was linked to in the original blog post that ultimately triggered this post.&amp;#160; The behavior demonstrated in this post isn’t a mystery, its documented in the Books Online (&lt;a href="http://msdn.microsoft.com/en-us/library/ms179355.aspx"&gt;Transaction Log Physical Architecture&lt;/a&gt;), but sometime empirical evidence like this helps solidify that fact.&amp;#160; &lt;/p&gt;</description></item></channel></rss>