SQL Server 2008 Extended Events

Zur Fehlersuche oder zur Untersuchung aller möglicher Probleme kannt ich bisher nur die DMVs und den Profiler.
Aber der SQL Server 2008 bietet ein noch weit besseres Toolset für solche Anlässe, nämlich die Extended Events.

Damit läßt sich scheinbar so ziemlich alles verfolgen, was auf der Box abgeht und mit dem SQL Server zu tun hat.
Vereinfacht gesagt, legt man fest, welche Ereignisse beobachtet werden sollen und wo die gesammtelten Informationen gesammelt werden sollen.

Als einführende Beispiele haben mir die folgenden Artikel sehr geholfen:

Ausführlicher kann man sich mit dem Whitepaper Using SQL Server 2008 Extended Events einarbeiten.

Auf CodePlex gibt’s auch eine grafische Oberfläche für die Extended Events, das SQL Server 2008 Extended Events SSMS Addin. Damit kommt man anfangs wahrscheinlich einfacher zu einem Ergebnis, da es einige Events, Targets, usw. gibt.

Mit folgendem Skript kann man z.B. auftretenden Fehler mitprotokollieren:

IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AjErrorsReported')
DROP EVENT SESSION AjErrorsReported ON SERVER
GO

--SELECT * FROM sysmessages WHERE msglangid=1031 ORDER BY 1,2

-- Create Event
CREATE EVENT SESSION AjErrorsReported
ON SERVER
-- Add event to capture event
ADD EVENT sqlserver.error_reported
(
-- Add action - event property
ACTION (
sqlserver.session_id
,sqlserver.sql_text
,sqlserver.tsql_stack
,sqlserver.database_id
,sqlserver.username
,sqlserver.client_hostname
)
WHERE sqlserver.error_reported.severity>=11
)
-- Add target for capturing the data - XML File
ADD TARGET package0.asynchronous_file_target(
SET filename='E:\SqlServerData\MSSQL10_50.MSSQLSERVER\MSSQL\Log\AjErrorsReported.xet'
, metadatafile='E:\SqlServerData\MSSQL10_50.MSSQLSERVER\MSSQL\Log\AjErrorsReported.xem')
-- Add target for capturing the data - Ring Bugger
--,ADD TARGET package0.ring_buffer(SET max_memory = 4096)
WITH (max_dispatch_latency = 3 seconds)
GO

-- Enable Event
ALTER EVENT SESSION AjErrorsReported ON SERVER
STATE=START
GO

-- Read the data from Ring Buffer
--SELECT CAST(dt.target_data AS XML) AS xmlLockData
--FROM sys.dm_xe_session_targets dt
--JOIN sys.dm_xe_sessions ds ON ds.Address = dt.event_session_address
--JOIN sys.server_event_sessions ss ON ds.Name = ss.Name
--WHERE dt.target_name = 'ring_buffer'
--AND ds.Name = 'AjErrorsReported'
--GO

-- Read the data from XML File
SELECT
event_data_XML.value('(event/data[1])[1]','INT') AS error
,event_data_XML.value('(event/data[2])[1]','INT') AS severity
,event_data_XML.value('(event/data[3])[1]','INT') AS [state]
,event_data_XML.value('(event/data[4])[1]','BIT') AS user_defined
,event_data_XML.value('(event/data[5])[1]','VARCHAR(1024)') AS [message]
,event_data_XML.value('(event/action[1])[1]','INT') AS session_id
,event_data_XML.value('(event/action[4])[1]','INT') AS database_id
,event_data_XML.value('(event/action[5])[1]','VARCHAR(50)') AS username
,event_data_XML.value('(event/action[6])[1]','VARCHAR(10)') AS client_hostname
,event_data_XML.value('(event/action[2])[1]','VARCHAR(1024)') AS sql_text
,event_data_XML.value('(event/action[3])[1]','VARCHAR(512)') AS tsql_stack
--SELECT CAST(event_data AS XML) event_data, *
FROM
(
SELECT CAST(event_data AS XML) event_data_XML, *
FROM sys.fn_xe_file_target_read_file
('E:\SqlServerData\MSSQL10_50.MSSQLSERVER\MSSQL\Log\AjErrorsReported*.xet',
'E:\SqlServerData\MSSQL10_50.MSSQLSERVER\MSSQL\Log\AjErrorsReported*.xem',
NULL, NULL)) T
GO

-- Stop the event
ALTER EVENT SESSION AjErrorsReported ON SERVER
STATE=STOP
GO

-- Clean up. Drop the event
DROP EVENT SESSION AjErrorsReported
ON SERVER
GO
Advertisements

Schlagwörter: ,

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: