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. 
...
AGENDA 
• Définition, organisation du moteur XE: packages, events, 
targets, etc… 
• Gestion et exploitation des traces. 
...
QU’EST-CE QUE LE MOTEUR XE? 
• Vers une évolution logique: SQL Trace/sysperfinfo/dbcc 
sqlperf(), puis DMV/DMF, ring buffe...
ORGANISATION DU MOTEUR XE 
targets 
maps 
types 
actions 
events 
PACKAGE 
PACKAGE 
(.dll) 
(.dll) 
XE ENGINE 
PACKAGE 
(....
ORGANISATION DU MOTEUR XE 
• Cloisonnement entre moteur d’exécution et 
métadonnées: permet d’ajouter aisément de nouveaux...
PACKAGES & EVENTS 
• Les packages contiennent les métadonnées définissant 
un ensemble commun d’évènements, de données 
as...
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éterm...
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 ...
PACKAGES & EVENTS 
• SecAudit (sqllang.dll) : utilisé en interne pour les Audit 
Specifications. Non utilisable dans une s...
TARGETS 
• Le target est la destination dans laquelle les informations 
capturées sur l’évènement seront stockées pour int...
RING_BUFFER 
• En mémoire seulement, taille par défaut illimitée 
(max_memory=+oo, max_events_limit=1000). 
• Recyclage so...
EVENT_FILE 
• Anciennement asynchronous_file_target. 
• Permet de conserver un historique de trace persistant. 
• Les donn...
EVENT_COUNTER 
• Anciennement synchronous_event_counter. 
• Compte le nombre d’events déclenchés par une session. 
• Perme...
HISTOGRAM 
• Anciennement bucketizers. 
• Permet de regrouper des évènements autour d’un critère 
(source). Par exemple co...
PAIR_MATCHING 
• Permet de détecter les events qui habituellement vont par 
paire et qui sont orphelins: transaction ouver...
ETW_CLASSIC_SYNC_TARGET 
• Passerelle vers un consommateur ETW type. 
• Permet de mettre en corrélation des traces SQL Ser...
AUTRES OBJETS 
• Actions: associées à un event. Soit collecte de données 
relatives à l’event (44) soit exécution d’une tâ...
EXPOSITION DES METADATA 
sys.dm_xe_packages 
package0, sqlserver, 
sqlos, SecAudit, ucs, 
filestream, sqlclr, 
sqlserver (...
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é...
GESTION D’UNE SESSION XE 
CREATE EVENT SESSION XE_RequetesLentes ON SERVER 
ADD EVENT sqlserver.sql_statement_completed 
(...
EXPOSITION DES SESSIONS XE 
sys.dm_xe_sessions 
Liste des sessions 
cataloguées et options 
de session 
sys.dm_xe_session_...
EXPLOITER LES RESULTATS 
• Les targets couramment utilisés (ring buffer, event file) 
stockent des données brutes et compa...
EXPLOITER LES RESULTATS: XQUERY 
Event=sql_statement_completed 
data = ‘cpu_time’ 
Value = 156000 
action = ‘plan_handle’ ...
EXPLOITER LES RESULTATS: XQUERY 
DECLARE @target_data XML 
SELECT @target_data = CAST (target_data AS XML) 
FROM sys.dm_xe...
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. 
• R...
XE VS SQL TRACE 
• Nb d’events (591 contre 180 events en SQL Trace). 
• Empreinte réduite côté serveur. 
• Choix des targe...
BILAN NOUVEAUTES DENALI (XE) 
• Interface graphique de gestion intégrée dans SSMS. 
• XE Object Model (management & reader...
QUELQUES CAS D’UTILISATION 
• Détecter quelle est la requête qui a provoqué un page 
split (page_split + action sql_text)....
DEMO 2 
Sessions XE
Merci à nos Sponsors 
Rencontrez les dans l’espace partenaires
Prochain SlideShare
Chargement dans…5
×

Journées SQL Server 2011 Extended Events

336 vues

Publié le

Slidedeck de ma session aux JSS 2011 sur Xevents

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
336
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
7
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive
  • En cas de conflit dans le code entre
  • Le cloisonnement est d’ailleurs repris dans le XE object model, on a bien la séparation XEStore -> Package / XEStore -> Session
  • 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.
  • Anciennement max_memory=4Mb
  • 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.
  • 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
  • Orange - Use for Breakthrough Insight specific content
  • 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
  • Orange - Use for Breakthrough Insight specific content
  • Journées SQL Server 2011 Extended Events

    1. 1. Rejoignez la Communauté
    2. 2. ÉVÈNEMENTS ÉTENDUS (XE) & nouveautés Denali
    3. 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. 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. 5. 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.
    6. 6. 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
    7. 7. 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…)
    8. 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. 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. 10. PACKAGES & EVENTS Events par package (SQL Server Denali CTP3) sqlserver* = sqlmin.dll
    11. 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. 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. 13. 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’).
    14. 14. 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.
    15. 15. 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).
    16. 16. 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).
    17. 17. 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)
    18. 18. 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).
    19. 19. 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.
    20. 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. 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. 22. DEMO 1 Metadata
    23. 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. 24. 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;
    25. 25. 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
    26. 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. 27. EXPLOITER LES RESULTATS: XQUERY Event=sql_statement_completed data = ‘cpu_time’ Value = 156000 action = ‘plan_handle’ Value = 0x06000500…
    28. 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. 29. EXPLOITER LES RESULTATS: GUI * Pour plus de détails, cf session ‘Optimisation & Troubleshooting – F. Pichaut’.
    30. 30. 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...
    31. 31. 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.
    32. 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. 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. 34. DEMO 2 Sessions XE
    35. 35. Merci à nos Sponsors Rencontrez les dans l’espace partenaires

    ×