SQL Clone
SQLServerCentral is supported by Redgate
 
Log in  ::  Register  ::  Not logged in
 
 
 

What is an Event-Less Extended Event Session?

(Be sure to checkout the FREE SQLpassion Performance Tuning Training Plan - you get a weekly email packed with all the essential knowledge you need to know about performance tuning on SQL Server.)

Do you have ever heard about an “Event-Less” Extended Event Session? What is the idea about it? Why do you want to have an Extended Event Session without any events? Let’s talk about it…

Event Less

When you create an Extended Event Session in SQL Server, the definition of the Event Session specifies which Events, Actions, and which Targets you want to use. Imagine you want to track for example Wait Statistics for a specific SPID. In that case you could create the following simple Extended Event Session.

-- Create a new event session that collects wait statistics
CREATE EVENT SESSION CollectWaitStatistics 
ON SERVER
ADD EVENT sqlos.wait_info
(
	WHERE sqlserver.session_id = 55
)
ADD TARGET package0.ring_buffer
WITH
(
	MAX_DISPATCH_LATENCY = 1 SECONDS
)
GO

-- Start the Event Session
ALTER EVENT SESSION CollectWaitStatistics
ON SERVER
STATE = START
GO

As soon as you start this session, SQL Server will track all wait_info events for the given SPID and writes everything into the ring_buffer target, which is a target in memory. But besides adding events to an Extended Event Session you can also drop existing events from an Event Session. Let’s have a look at the following code.

-- Detach the registered events from the Event Session
ALTER EVENT SESSION CollectWaitStatistics
ON SERVER
DROP EVENT sqlos.wait_info
GO

As soon as you have executed this code, you have now an Event-Less Extended Event Session. You can verify that by running the following SQL statement, which returns you all active events for a given Event Session.

SELECT e.* FROM sys.dm_xe_session_events e
INNER JOIN sys.dm_xe_sessions s ON s.address = e.event_session_address
WHERE s.name = 'CollectWaitStatistics'
GO

And the output is just empty. Cool, huh? But what’s the purpose of an Event-Less Extended Event Session?

The answer is quite simple: you are not tracking any event anymore, and therefore your Extended Event Session doesn’t generate any overhead in SQL Server anymore. Of course you could also say that you can achieve the same by stopping the Extended Event Session. That’s true, but if your Extended Event Session was configured with an In-Memory target, like the ring_buffer target, you will also immediately loose that captured information!

And to overcome that specific problem, you can just drop events from an Extended Event Session without stopping the Event Session itself. And afterwards you can analyze the captured information in an In-Memory target. Cool, huh?

Summary

As you have seen, an Event-Less Extended Event Session makes sense when you deal with an In-Memory target, like the ring_buffer target, and you want to generate as less overhead as possible during the analysis of the captured information.

If you want to learn more about Extended Events, and how to use that technology to troubleshoot SQL Server problems, you can also sign-up for my one-day webinar on June 21. Hurry, because the remaining space is limited!

Thanks for your time,

-Klaus

Klaus Aschenbrenner

Klaus Aschenbrenner provides independent SQL Server Consulting Services across Europe and the US. Klaus works with the .NET Framework and especially with the SQL Server 2005/2008 from the very beginnings. In the years 2004 - 2005 Klaus was entitled with the MVP award from Microsoft for his tremendous support in the .NET Community. Klaus has also written the book Pro SQL Server 2008 Service Broker which was published by Apress in the Summer of 2008. Further information about Klaus you can find on his homepage at http://www.SQLpassion.at. He also twitters at http://twitter.com/Aschenbrenner.

Comments

Leave a comment on the original post [www.sqlpassion.at, opens in a new window]

Loading comments...