Rejoignez la Communauté
ÉVÈNEMENTS ÉTENDUS (XE) 
& nouveautés Denali
SPEAKER 
David BAFFALEUF - dbaffaleuf@capdata.fr 
DBA de production depuis 1999. 
Consultant et formateur SQL Server. 
Responsable technique du service DBA à distance @ CapData 
Consulting. 
SQL Server MVP. 
 http://www.capdata.fr 
 http://blog.capdata.fr
AGENDA 
• Définition, organisation du moteur XE: packages, events, 
targets, etc… 
• Gestion et exploitation des traces. 
• Comparatif XE vs SQL Trace. 
• Bilan nouveautés Denali. 
• Démo / Q & A.
QU’EST-CE QUE LE MOTEUR XE? 
• Vers une évolution logique: SQL Trace/sysperfinfo/dbcc 
sqlperf(), puis DMV/DMF, ring buffers… 
• Architecture de gestion évènementielle imbriquée au 
coeur des moteurs relationnel et de stockage. 
• Hautement configurable, faible impact. 
• Très grande richesse en nombre d’évènements 
capturables. (591 contre 180 dans SQL Trace) 
• Intégration possible avec traces système (ETW). 
• SQL Trace en voie d’obsolescence.
ORGANISATION DU MOTEUR XE 
targets 
maps 
types 
actions 
events 
PACKAGE 
PACKAGE 
(.dll) 
(.dll) 
XE ENGINE 
PACKAGE 
(.dll) 
WORKER 
DISPATCHER 
(+pool) 
predicates 
XE 
SESSXIOEN 
SESSXIOEN 
SESSION 
Events 
Targets 
Buffers 
METADATA EXECUTION 
W 
W W 
W 
W W 
W 
sqllang.dll 
sqldk.dll 
sqlmin.dll 
SQL SERVER CORE ENGINE 
messages
ORGANISATION DU MOTEUR XE 
• Cloisonnement entre moteur d’exécution et 
métadonnées: permet d’ajouter aisément de nouveaux 
packages et groupes d’évènements dans une release, ou 
one-off au besoin pour debug (4 packages en 2008 RTM, 
8 en Denali CTP3) 
• Les métadonnées sont encapsulées dans des packages 
(dll externes) et exposent des catégories d’objets 
manipulables dans une session: events, targets, actions, 
etc… 
• Le moteur fournit un pool de workers autonome pour 
réagir de manière asynchrone (consommer un évènement, 
écrire dans un target, etc…)
PACKAGES & EVENTS 
• Les packages contiennent les métadonnées définissant 
un ensemble commun d’évènements, de données 
associées, d’opérateurs et de destinations de trace. 
• Ils sont définis dans une dll externe. 
• 8 packages disponibles en CTP3: package0, sqlserver, sqlos, 
SecAudit, ucs, sqlclr, filestream, sqlserver*. 
• Exposés par sys.dm_xe_packages. 
• Certains packages sont privés et non utilisables 
directement (SecAudit): 
SELECT p.* FROM sys.dm_xe_packages p 
WHERE (p.capabilities IS NULL 
OR p.capabilities <> 1);
PACKAGES & EVENTS 
• Les events définissent des points d’intérêt dans le flot 
d’exécution du code. Un test booléen détermine à chaque 
passage si un évènement est déclaré dans une trace active 
et s’il valide le prédicat ou non. 
• Les events sont classés selon la norme utilisée pour ETW: 
Admin, Analytic, Debug, Operationnal. 
• En tout 591 events publics répartis dans 7 packages. 
• Exposés par sys.dm_xe_objects avec object_type = 
‘event’: 
SELECT p.name AS package_name, o.name AS event_name, FROM 
sys.dm_xe_packages AS p 
JOIN sys.dm_xe_objects AS o ON p.guid = o.package_guid 
WHERE (p.capabilities IS NULL OR p.capabilities & 1 = 0) 
AND (o.capabilities IS NULL OR o.capabilities & 1 = 0) 
AND o.object_type = 'event'
PACKAGES & EVENTS 
Events par package 
(SQL Server Denali CTP3) 
sqlserver* = sqlmin.dll
PACKAGES & EVENTS 
• Package0 (sqldk.dll): package racine, ne contient pas 
d’évènements, mais définit les objets de plus haut niveau: 
tous les targets, tous les types et messages, plus quelques 
prédicats, actions système, et les maps ETW. 
• sqlserver (sqllang.dll): définit les principaux évènements 
associés aux moteurs relationnel / stockage 
(sql_statement_completed, sp_statement_completed, login, 
logout, auto_stats, etc…) => 176 events. 
• sqlos (sqldk.dll): trace les évènements relatifs à chaque 
noeud SQLOS (workers, tasks, async IO, appels systèmes, 
scheduling, synchronisation, etc…). Debug avancé => 61 
events.
PACKAGES & EVENTS 
• SecAudit (sqllang.dll) : utilisé en interne pour les Audit 
Specifications. Non utilisable dans une session manuelle 
(capabilities = 1). * 
• ucs (sqllang.dll): Unified Communication Stack. TCP Endpoints, 
Service Broker => 21 events. 
• sqlclr (sqllang.dll): pour déboguer des problèmes dans un 
appdomain SQLCLR (échec allocation de mémoire). => 4 
events. 
• filestream (sqllang.dll): étend les évènements capturables 
depuis sqlserver/sqllang.dll pour filestream, notamment les 
interactions avec RsFx. => 13 events. 
• sqlserver (sqlmin.dll): grosse extension du package sqlserver 
initial (+316 events) 
* Pour plus de détails, cf session ‘Sécurité dans SQL Server – D. Barbarin’.
TARGETS 
• Le target est la destination dans laquelle les informations 
capturées sur l’évènement seront stockées pour interrogation. 
Souvent les données sont stockées de manière brute pour 
gagner de la place. 
• Les 6 targets disponibles sont tous définis dans package0: 
etw_classic_sync_target, histogram, event_file, event_counter, 
pair_matching, ring_buffer. 
• Chaque target a ses applications, ses avantages et ses 
inconvénients. On peut en déclarer plusieurs par session. 
• Synchrone / asynchrone: consommé immédiatement par le SOS 
worker, ou consommé plus tard par un des workers dispatché 
par le moteur XE. 
• Exposés dans sys.dm_xe_objects (object_type=‘target’).
RING_BUFFER 
• En mémoire seulement, taille par défaut illimitée 
(max_memory=+oo, max_events_limit=1000). 
• Recyclage soit lorsque le ring buffer est plein ou que le 
nombre max d’events à retenir est atteint 
(occurrence_number ). Sinon vidé lors d’un restart ou d’un 
arrêt de la session XE. 
• Exécution asynchrone. 
• Les données sont matérialisées en XML à l’interrogation 
via sys.dm_xe_session_targets. 
• Pas recommandé pour les sessions générant une grande 
quantité d’events par seconde, mais pratique si prédicat 
très filtrant.
EVENT_FILE 
• Anciennement asynchronous_file_target. 
• Permet de conserver un historique de trace persistant. 
• Les données sont matérialisées en XML lors de l’appel à 
sys.fn_xe_file_target_read_file(). 
• Entièrement configurable: nom, chemin, taille max, 
rollover, taille d’incrément... 
• Exécution asynchrone. 
• Plus de fichier XEM en CTP3+. 
• Eviter d’agréger directement via la TVF (lent).
EVENT_COUNTER 
• Anciennement synchronous_event_counter. 
• Compte le nombre d’events déclenchés par une session. 
• Permet de tester les prédicats et évaluer si le target choisi 
est adapté (ring_buffer, event_file). 
• Exécution synchrone, mais impact minimum. 
• Informations matérialisées en XML lors de l’interrogation 
de sys.dm_xe_session_targets (idem ring buffers).
HISTOGRAM 
• Anciennement bucketizers. 
• Permet de regrouper des évènements autour d’un critère 
(source). Par exemple compter les recompilations par 
database_id. 
• Permet ainsi de cibler ses efforts en fonction des résultats. 
• Exécution asynchrone (plus de bucketizer synchrone) 
• Informations matérialisées en XML lors de l’interrogation 
de sys.dm_xe_session_targets (idem ring buffers)
PAIR_MATCHING 
• Permet de détecter les events qui habituellement vont par 
paire et qui sont orphelins: transaction ouverte, connexion 
active, verrou ou latch non libéré, requête en cours 
d’exécution, etc… 
• Nécessite d’établir quels sont les events pairs: BEGIN/END, 
ou STARTING/COMPLETED. 
• Difficulté de trouver des évènements parfaitement pair-à-pair 
(ex: transaction, verrous) 
• Limité à 10000 events orphelins en CTP3+ pour éviter les 
saturations (max_orphans).
ETW_CLASSIC_SYNC_TARGET 
• Passerelle vers un consommateur ETW type. 
• Permet de mettre en corrélation des traces SQL Server et 
système via tracerpt et Windows Performance Analyzer. 
• Le format de stockage est varié: texte, csv, XML, etc... 
• Une seule session ETW active par instance. 
• Les events SQL sont affichés mais pas décryptés par 
Performance Analyzer Vista/2008 (provider classic vs 
manifest). 
• Pas très pratique: nécessite de nombreuses actions 
manuelles avec logman pour forcer le target à flusher ses 
buffers, et pour réellement couper la trace.
AUTRES OBJETS 
• Actions: associées à un event. Soit collecte de données 
relatives à l’event (44) soit exécution d’une tâche 
particulière (3, orientées debug). 
• Maps: table de correspondance clés / valeurs (genre 
d’EventSubClass plus poussé). Par exemple les différentes 
causes de recompilation, les différents waits. 
• Types: Définit les types de données utilisés (uint32, 
uint64, guid, xml…). Proviennent tous du package0. 
• Prédicates: mécanisme de filtrage, permet de diminuer 
davantage l’empreinte de XE sur les performances. 
• Messages: messages renvoyés par le moteur XE. 
• Exposés dans sys.dm_xe_objects (object_type=‘…’).
EXPOSITION DES METADATA 
sys.dm_xe_packages 
package0, sqlserver, 
sqlos, SecAudit, ucs, 
filestream, sqlclr, 
sqlserver (sqlmin) 
sys.dm_xe_objects 
events, targets, 
predicates, actions, 
maps, types 
sys.dm_xe_object_columns 
-Données associées aux events 
- Options associées aux targets 
sys.dm_xe_map_values 
Correspondance clé / 
valeur 
object name + 
package guid 
package guid 
package guid map name
DEMO 1 
Metadata
SESSION XE 
• Une session XE définit une trace composée d’un 
ensemble d’évènements, actions prédicats et targets 
destinés à être capturés pour analyse. 
• Tous les éléments constitutifs sont définis à travers la 
commande DML CREATE EVENT SESSION (ou via le 
GUI à partir de Denali CTP3+). 
• Les sessions peuvent être démarrées, modifiées ou 
arrêtées sans avoir à être recréées. 
• Options de session XE: mémoire, max_dispatch_latency, 
startup_date, etc… dynamiques.
GESTION D’UNE SESSION XE 
CREATE EVENT SESSION XE_RequetesLentes ON SERVER 
ADD EVENT sqlserver.sql_statement_completed 
(ACTION (sqlserver.sql_text, sqlserver.plan_handle) 
WHERE sqlserver.database_id = 5 AND cpu_time > 10) 
ADD TARGET package0.ring_buffer 
WITH (max_dispatch_latency = 1 seconds); 
ALTER EVENT SESSION XE_RequetesLentes ON SERVER 
STATE = START; 
… 
ALTER EVENT SESSION XE_RequetesLentes ON SERVER 
STATE = STOP; 
DROP EVENT SESSION XE_RequetesLentes ON SERVER;
EXPOSITION DES SESSIONS XE 
sys.dm_xe_sessions 
Liste des sessions 
cataloguées et options 
de session 
sys.dm_xe_session_targets 
Liste et contenu (XML) des 
targets par session 
sys.dm_xe_session_object_columns 
sys.dm_xe_session_event_actions 
Liste les actions par event 
sys.dm_xe_session_events 
Liste les events définis par 
session 
Session 
address 
Session 
address 
Session 
address 
Liste les options des targets et des 
events par session 
Session 
address
EXPLOITER LES RESULTATS 
• Les targets couramment utilisés (ring buffer, event file) 
stockent des données brutes et compactes. 
• Ces données sont exposées en XML via: 
sys.dm_xe_session_targets : colonne target_data. 
sys.dm_xe_file_target_read_file(): colonne 
event_data. 
• Pour accéder aux données, il faut pouvoir les parser en 
XQuery. 
• Des outils existent pour lire le contenu sans passer par du 
XQuery (XE code generator - A. Machanic / XE SSMS addin 
- J. Kehayias, et le GUI – XE Profiler).
EXPLOITER LES RESULTATS: XQUERY 
Event=sql_statement_completed 
data = ‘cpu_time’ 
Value = 156000 
action = ‘plan_handle’ 
Value = 0x06000500…
EXPLOITER LES RESULTATS: XQUERY 
DECLARE @target_data XML 
SELECT @target_data = CAST (target_data AS XML) 
FROM sys.dm_xe_sessions AS s JOIN sys.dm_xe_session_targets AS t 
ON t.event_session_address = s.address 
WHERE s.name = 'XE_RequetesLentes' 
SELECT 
DATEADD (hh, DATEDIFF (hh, GETUTCDATE(), CURRENT_TIMESTAMP), 
n.value('(@timestamp)[1]', 'datetime2')) as[timestamp], 
n.value('(data[@name="duration"]/value)[1]','bigint') as duration, 
n.value('(data[@name="cpu_time"]/value)[1]','bigint') as cpu_time, 
n.value('(data[@name="physical_reads"]/value)[1]','bigint') as physical_reads, 
n.value('(data[@name="logical_reads"]/value)[1]',’bigint') as logical_reads, 
n.value('(action[@name="sql_text"]/value)[1]','nvarchar(max)') as sql_text 
FROM @target_data.nodes ('RingBufferTarget/event[@name = 
''sql_statement_completed'']') AS q(n)
EXPLOITER LES RESULTATS: GUI 
* Pour plus de détails, cf session ‘Optimisation & 
Troubleshooting – F. Pichaut’.
SYSTEM_HEALTH 
• Depuis SQL Server 2008 RC0 
• Initiative du support PSS 
• Démarrée automatiquement lors du startup. 
• Ring buffer + event file pour persistance en CTP3+ 
• Peut être customisée contrairement à la trace par défaut. 
• Trace au minimum: 
Sessions en erreur avec severity > 20 ou échec mémoire. 
Non-yielding schedulers (17883). 
Deadlocks. 
Certains waits...
XE VS SQL TRACE 
• Nb d’events (591 contre 180 events en SQL Trace). 
• Empreinte réduite côté serveur. 
• Choix des targets. 
• Capacités de filtrage avancées (idem SARG). 
• Correspondance entre events avec sys.trace_events <-> 
sys.trace_xe_event_map depuis CTP1. 
• Evaluer rapidement l’impact de la trace avec un simple 
comptage (event_counter). 
• system_health + trace par défaut complémentaires. 
• SQL Trace obsolète en Denali.
BILAN NOUVEAUTES DENALI (XE) 
• Interface graphique de gestion intégrée dans SSMS. 
• XE Object Model (management & reader APIs) 
• Equité parfaite avec les évènements SQL Trace. 
• Simplification des targets (plus de fichier xem, plus de 
bucketizers sync/async…) 
• Gros ajout d’events (+354 events avec les 4 nouveaux 
packages sqlserver, filestream, ucs et sqlclr). 
• 1 session supplémentaire pour les Availability Groups 
(AlwaysOn_health). 
• system_health persistant avec event_file.
QUELQUES CAS D’UTILISATION 
• Détecter quelle est la requête qui a provoqué un page 
split (page_split + action sql_text). 
• Détecter une erreur 824 (constant_page_corruption 
_detected) avant que l’utilisateur qui a reçu le message 
n’appelle pour se plaindre. 
• Détecter outstanding IO > 15 secondes (long_io_detected) 
• Tracer les waits par session. 
• Détecter une rupture de connexion (timeout => pas de 
statement_completed) 
• ...
DEMO 2 
Sessions XE
Merci à nos Sponsors 
Rencontrez les dans l’espace partenaires

Journées SQL Server 2011 Extended Events

  • 1.
  • 2.
    ÉVÈNEMENTS ÉTENDUS (XE) & nouveautés Denali
  • 3.
    SPEAKER David BAFFALEUF- dbaffaleuf@capdata.fr DBA de production depuis 1999. Consultant et formateur SQL Server. Responsable technique du service DBA à distance @ CapData Consulting. SQL Server MVP.  http://www.capdata.fr  http://blog.capdata.fr
  • 4.
    AGENDA • Définition,organisation du moteur XE: packages, events, targets, etc… • Gestion et exploitation des traces. • Comparatif XE vs SQL Trace. • Bilan nouveautés Denali. • Démo / Q & A.
  • 5.
    QU’EST-CE QUE LEMOTEUR XE? • Vers une évolution logique: SQL Trace/sysperfinfo/dbcc sqlperf(), puis DMV/DMF, ring buffers… • Architecture de gestion évènementielle imbriquée au coeur des moteurs relationnel et de stockage. • Hautement configurable, faible impact. • Très grande richesse en nombre d’évènements capturables. (591 contre 180 dans SQL Trace) • Intégration possible avec traces système (ETW). • SQL Trace en voie d’obsolescence.
  • 6.
    ORGANISATION DU MOTEURXE targets maps types actions events PACKAGE PACKAGE (.dll) (.dll) XE ENGINE PACKAGE (.dll) WORKER DISPATCHER (+pool) predicates XE SESSXIOEN SESSXIOEN SESSION Events Targets Buffers METADATA EXECUTION W W W W W W W sqllang.dll sqldk.dll sqlmin.dll SQL SERVER CORE ENGINE messages
  • 7.
    ORGANISATION DU MOTEURXE • Cloisonnement entre moteur d’exécution et métadonnées: permet d’ajouter aisément de nouveaux packages et groupes d’évènements dans une release, ou one-off au besoin pour debug (4 packages en 2008 RTM, 8 en Denali CTP3) • Les métadonnées sont encapsulées dans des packages (dll externes) et exposent des catégories d’objets manipulables dans une session: events, targets, actions, etc… • Le moteur fournit un pool de workers autonome pour réagir de manière asynchrone (consommer un évènement, écrire dans un target, etc…)
  • 8.
    PACKAGES & EVENTS • Les packages contiennent les métadonnées définissant un ensemble commun d’évènements, de données associées, d’opérateurs et de destinations de trace. • Ils sont définis dans une dll externe. • 8 packages disponibles en CTP3: package0, sqlserver, sqlos, SecAudit, ucs, sqlclr, filestream, sqlserver*. • Exposés par sys.dm_xe_packages. • Certains packages sont privés et non utilisables directement (SecAudit): SELECT p.* FROM sys.dm_xe_packages p WHERE (p.capabilities IS NULL OR p.capabilities <> 1);
  • 9.
    PACKAGES & EVENTS • Les events définissent des points d’intérêt dans le flot d’exécution du code. Un test booléen détermine à chaque passage si un évènement est déclaré dans une trace active et s’il valide le prédicat ou non. • Les events sont classés selon la norme utilisée pour ETW: Admin, Analytic, Debug, Operationnal. • En tout 591 events publics répartis dans 7 packages. • Exposés par sys.dm_xe_objects avec object_type = ‘event’: SELECT p.name AS package_name, o.name AS event_name, FROM sys.dm_xe_packages AS p JOIN sys.dm_xe_objects AS o ON p.guid = o.package_guid WHERE (p.capabilities IS NULL OR p.capabilities & 1 = 0) AND (o.capabilities IS NULL OR o.capabilities & 1 = 0) AND o.object_type = 'event'
  • 10.
    PACKAGES & EVENTS Events par package (SQL Server Denali CTP3) sqlserver* = sqlmin.dll
  • 11.
    PACKAGES & EVENTS • Package0 (sqldk.dll): package racine, ne contient pas d’évènements, mais définit les objets de plus haut niveau: tous les targets, tous les types et messages, plus quelques prédicats, actions système, et les maps ETW. • sqlserver (sqllang.dll): définit les principaux évènements associés aux moteurs relationnel / stockage (sql_statement_completed, sp_statement_completed, login, logout, auto_stats, etc…) => 176 events. • sqlos (sqldk.dll): trace les évènements relatifs à chaque noeud SQLOS (workers, tasks, async IO, appels systèmes, scheduling, synchronisation, etc…). Debug avancé => 61 events.
  • 12.
    PACKAGES & EVENTS • SecAudit (sqllang.dll) : utilisé en interne pour les Audit Specifications. Non utilisable dans une session manuelle (capabilities = 1). * • ucs (sqllang.dll): Unified Communication Stack. TCP Endpoints, Service Broker => 21 events. • sqlclr (sqllang.dll): pour déboguer des problèmes dans un appdomain SQLCLR (échec allocation de mémoire). => 4 events. • filestream (sqllang.dll): étend les évènements capturables depuis sqlserver/sqllang.dll pour filestream, notamment les interactions avec RsFx. => 13 events. • sqlserver (sqlmin.dll): grosse extension du package sqlserver initial (+316 events) * Pour plus de détails, cf session ‘Sécurité dans SQL Server – D. Barbarin’.
  • 13.
    TARGETS • Letarget est la destination dans laquelle les informations capturées sur l’évènement seront stockées pour interrogation. Souvent les données sont stockées de manière brute pour gagner de la place. • Les 6 targets disponibles sont tous définis dans package0: etw_classic_sync_target, histogram, event_file, event_counter, pair_matching, ring_buffer. • Chaque target a ses applications, ses avantages et ses inconvénients. On peut en déclarer plusieurs par session. • Synchrone / asynchrone: consommé immédiatement par le SOS worker, ou consommé plus tard par un des workers dispatché par le moteur XE. • Exposés dans sys.dm_xe_objects (object_type=‘target’).
  • 14.
    RING_BUFFER • Enmémoire seulement, taille par défaut illimitée (max_memory=+oo, max_events_limit=1000). • Recyclage soit lorsque le ring buffer est plein ou que le nombre max d’events à retenir est atteint (occurrence_number ). Sinon vidé lors d’un restart ou d’un arrêt de la session XE. • Exécution asynchrone. • Les données sont matérialisées en XML à l’interrogation via sys.dm_xe_session_targets. • Pas recommandé pour les sessions générant une grande quantité d’events par seconde, mais pratique si prédicat très filtrant.
  • 15.
    EVENT_FILE • Anciennementasynchronous_file_target. • Permet de conserver un historique de trace persistant. • Les données sont matérialisées en XML lors de l’appel à sys.fn_xe_file_target_read_file(). • Entièrement configurable: nom, chemin, taille max, rollover, taille d’incrément... • Exécution asynchrone. • Plus de fichier XEM en CTP3+. • Eviter d’agréger directement via la TVF (lent).
  • 16.
    EVENT_COUNTER • Anciennementsynchronous_event_counter. • Compte le nombre d’events déclenchés par une session. • Permet de tester les prédicats et évaluer si le target choisi est adapté (ring_buffer, event_file). • Exécution synchrone, mais impact minimum. • Informations matérialisées en XML lors de l’interrogation de sys.dm_xe_session_targets (idem ring buffers).
  • 17.
    HISTOGRAM • Anciennementbucketizers. • Permet de regrouper des évènements autour d’un critère (source). Par exemple compter les recompilations par database_id. • Permet ainsi de cibler ses efforts en fonction des résultats. • Exécution asynchrone (plus de bucketizer synchrone) • Informations matérialisées en XML lors de l’interrogation de sys.dm_xe_session_targets (idem ring buffers)
  • 18.
    PAIR_MATCHING • Permetde détecter les events qui habituellement vont par paire et qui sont orphelins: transaction ouverte, connexion active, verrou ou latch non libéré, requête en cours d’exécution, etc… • Nécessite d’établir quels sont les events pairs: BEGIN/END, ou STARTING/COMPLETED. • Difficulté de trouver des évènements parfaitement pair-à-pair (ex: transaction, verrous) • Limité à 10000 events orphelins en CTP3+ pour éviter les saturations (max_orphans).
  • 19.
    ETW_CLASSIC_SYNC_TARGET • Passerellevers un consommateur ETW type. • Permet de mettre en corrélation des traces SQL Server et système via tracerpt et Windows Performance Analyzer. • Le format de stockage est varié: texte, csv, XML, etc... • Une seule session ETW active par instance. • Les events SQL sont affichés mais pas décryptés par Performance Analyzer Vista/2008 (provider classic vs manifest). • Pas très pratique: nécessite de nombreuses actions manuelles avec logman pour forcer le target à flusher ses buffers, et pour réellement couper la trace.
  • 20.
    AUTRES OBJETS •Actions: associées à un event. Soit collecte de données relatives à l’event (44) soit exécution d’une tâche particulière (3, orientées debug). • Maps: table de correspondance clés / valeurs (genre d’EventSubClass plus poussé). Par exemple les différentes causes de recompilation, les différents waits. • Types: Définit les types de données utilisés (uint32, uint64, guid, xml…). Proviennent tous du package0. • Prédicates: mécanisme de filtrage, permet de diminuer davantage l’empreinte de XE sur les performances. • Messages: messages renvoyés par le moteur XE. • Exposés dans sys.dm_xe_objects (object_type=‘…’).
  • 21.
    EXPOSITION DES METADATA sys.dm_xe_packages package0, sqlserver, sqlos, SecAudit, ucs, filestream, sqlclr, sqlserver (sqlmin) sys.dm_xe_objects events, targets, predicates, actions, maps, types sys.dm_xe_object_columns -Données associées aux events - Options associées aux targets sys.dm_xe_map_values Correspondance clé / valeur object name + package guid package guid package guid map name
  • 22.
  • 23.
    SESSION XE •Une session XE définit une trace composée d’un ensemble d’évènements, actions prédicats et targets destinés à être capturés pour analyse. • Tous les éléments constitutifs sont définis à travers la commande DML CREATE EVENT SESSION (ou via le GUI à partir de Denali CTP3+). • Les sessions peuvent être démarrées, modifiées ou arrêtées sans avoir à être recréées. • Options de session XE: mémoire, max_dispatch_latency, startup_date, etc… dynamiques.
  • 24.
    GESTION D’UNE SESSIONXE CREATE EVENT SESSION XE_RequetesLentes ON SERVER ADD EVENT sqlserver.sql_statement_completed (ACTION (sqlserver.sql_text, sqlserver.plan_handle) WHERE sqlserver.database_id = 5 AND cpu_time > 10) ADD TARGET package0.ring_buffer WITH (max_dispatch_latency = 1 seconds); ALTER EVENT SESSION XE_RequetesLentes ON SERVER STATE = START; … ALTER EVENT SESSION XE_RequetesLentes ON SERVER STATE = STOP; DROP EVENT SESSION XE_RequetesLentes ON SERVER;
  • 25.
    EXPOSITION DES SESSIONSXE sys.dm_xe_sessions Liste des sessions cataloguées et options de session sys.dm_xe_session_targets Liste et contenu (XML) des targets par session sys.dm_xe_session_object_columns sys.dm_xe_session_event_actions Liste les actions par event sys.dm_xe_session_events Liste les events définis par session Session address Session address Session address Liste les options des targets et des events par session Session address
  • 26.
    EXPLOITER LES RESULTATS • Les targets couramment utilisés (ring buffer, event file) stockent des données brutes et compactes. • Ces données sont exposées en XML via: sys.dm_xe_session_targets : colonne target_data. sys.dm_xe_file_target_read_file(): colonne event_data. • Pour accéder aux données, il faut pouvoir les parser en XQuery. • Des outils existent pour lire le contenu sans passer par du XQuery (XE code generator - A. Machanic / XE SSMS addin - J. Kehayias, et le GUI – XE Profiler).
  • 27.
    EXPLOITER LES RESULTATS:XQUERY Event=sql_statement_completed data = ‘cpu_time’ Value = 156000 action = ‘plan_handle’ Value = 0x06000500…
  • 28.
    EXPLOITER LES RESULTATS:XQUERY DECLARE @target_data XML SELECT @target_data = CAST (target_data AS XML) FROM sys.dm_xe_sessions AS s JOIN sys.dm_xe_session_targets AS t ON t.event_session_address = s.address WHERE s.name = 'XE_RequetesLentes' SELECT DATEADD (hh, DATEDIFF (hh, GETUTCDATE(), CURRENT_TIMESTAMP), n.value('(@timestamp)[1]', 'datetime2')) as[timestamp], n.value('(data[@name="duration"]/value)[1]','bigint') as duration, n.value('(data[@name="cpu_time"]/value)[1]','bigint') as cpu_time, n.value('(data[@name="physical_reads"]/value)[1]','bigint') as physical_reads, n.value('(data[@name="logical_reads"]/value)[1]',’bigint') as logical_reads, n.value('(action[@name="sql_text"]/value)[1]','nvarchar(max)') as sql_text FROM @target_data.nodes ('RingBufferTarget/event[@name = ''sql_statement_completed'']') AS q(n)
  • 29.
    EXPLOITER LES RESULTATS:GUI * Pour plus de détails, cf session ‘Optimisation & Troubleshooting – F. Pichaut’.
  • 30.
    SYSTEM_HEALTH • DepuisSQL Server 2008 RC0 • Initiative du support PSS • Démarrée automatiquement lors du startup. • Ring buffer + event file pour persistance en CTP3+ • Peut être customisée contrairement à la trace par défaut. • Trace au minimum: Sessions en erreur avec severity > 20 ou échec mémoire. Non-yielding schedulers (17883). Deadlocks. Certains waits...
  • 31.
    XE VS SQLTRACE • Nb d’events (591 contre 180 events en SQL Trace). • Empreinte réduite côté serveur. • Choix des targets. • Capacités de filtrage avancées (idem SARG). • Correspondance entre events avec sys.trace_events <-> sys.trace_xe_event_map depuis CTP1. • Evaluer rapidement l’impact de la trace avec un simple comptage (event_counter). • system_health + trace par défaut complémentaires. • SQL Trace obsolète en Denali.
  • 32.
    BILAN NOUVEAUTES DENALI(XE) • Interface graphique de gestion intégrée dans SSMS. • XE Object Model (management & reader APIs) • Equité parfaite avec les évènements SQL Trace. • Simplification des targets (plus de fichier xem, plus de bucketizers sync/async…) • Gros ajout d’events (+354 events avec les 4 nouveaux packages sqlserver, filestream, ucs et sqlclr). • 1 session supplémentaire pour les Availability Groups (AlwaysOn_health). • system_health persistant avec event_file.
  • 33.
    QUELQUES CAS D’UTILISATION • Détecter quelle est la requête qui a provoqué un page split (page_split + action sql_text). • Détecter une erreur 824 (constant_page_corruption _detected) avant que l’utilisateur qui a reçu le message n’appelle pour se plaindre. • Détecter outstanding IO > 15 secondes (long_io_detected) • Tracer les waits par session. • Détecter une rupture de connexion (timeout => pas de statement_completed) • ...
  • 34.
  • 35.
    Merci à nosSponsors Rencontrez les dans l’espace partenaires

Notes de l'éditeur

  • #6 En cas de conflit dans le code entre
  • #7 Le cloisonnement est d’ailleurs repris dans le XE object model, on a bien la séparation XEStore -> Package / XEStore -> Session
  • #10 Channel / Audience of Interest Admin Admin events are primarily geared towards database administrators and end-users. Events in this channel signal an error that generally already has a well-defined solution for it like deadlocking, or broker activation termination. Analytic Analytic events are geared towards performance investigations, and exist almost every place a performance counter is updated in SQL Server. They are published in high volume and describe program operation. Analytic events closely parallel existing SQL Trace events like RPC starting/completed, SP statement starting/completed, and SQL statement starting/completed. Debug Debug events are geared towards product support and developers. They are used to troubleshoot a specific problem and may be requested by Microsoft CSS when working on an open incident. Operational Operational events are also geared towards administrators and end-users, but they may also be of interest to an operations engineer or similar role. Events in this channel signal a change like database started/stopped, or attached/detached. They can be used to trigger additional tasks based on the problem being reported.
  • #15 Anciennement max_memory=4Mb
  • #21 Les trois actions en exécution sont: - Create mini dump for the current thread - Create mini dump including all threads Break the process in the default debugger Différences entre pred_source et pred_compare: Pred_compare définit un comparateur pour un type - Pred source collecte une information disponible dans le TLS. Différence avec action, pred_source permet de collecter à la source sans avoir à ajouter une action pour collecter une info complémentaire.
  • #22 Les trois actions en exécution sont: - Create mini dump for the current thread - Create mini dump including all threads - Break the process in the default debugger
  • #23 Orange - Use for Breakthrough Insight specific content
  • #26 Les trois actions en exécution sont: - Create mini dump for the current thread - Create mini dump including all threads - Break the process in the default debugger
  • #35 Orange - Use for Breakthrough Insight specific content