SlideShare une entreprise Scribd logo
1  sur  35
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

Contenu connexe

Tendances

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013David BAFFALEUF
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbcRachid Lajouad
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Kristen Le Liboux
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4halleck45
 
CocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core DataCocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core DataCocoaHeads France
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsDenis Voituron
 
Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMatthieu Guillermin
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 

Tendances (12)

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Guss webcasts Query Memory Grants - june 2013
Guss webcasts   Query Memory Grants - june 2013Guss webcasts   Query Memory Grants - june 2013
Guss webcasts Query Memory Grants - june 2013
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbc
 
Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5Programmation orientée objet en PHP 5
Programmation orientée objet en PHP 5
 
Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4Programmation Orientée Objet et les Traits en PHP 5.4
Programmation Orientée Objet et les Traits en PHP 5.4
 
CocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core DataCocoaHeads Toulouse - Getting to the core of Core Data
CocoaHeads Toulouse - Getting to the core of Core Data
 
JAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de donnéesJAVA, JDBC et liaison base de données
JAVA, JDBC et liaison base de données
 
Hello mongo
Hello mongoHello mongo
Hello mongo
 
Procédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénientsProcédures CLR pour SQL Server : avantages et inconvénients
Procédures CLR pour SQL Server : avantages et inconvénients
 
Mettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JSMettez du temps réel dans votre Drupal avec Node JS
Mettez du temps réel dans votre Drupal avec Node JS
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 

Similaire à Journées SQL Server 2011 Extended Events

Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoringDavid BAFFALEUF
 
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...Microsoft Technet France
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.pptIdriss22
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurMicrosoft Technet France
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaMicrosoft
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réellesGeoffroy Arnoud
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piadelegue
 
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big DataAzure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big DataMicrosoft
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)Aymeric Weinbach
 
Spark Streaming
Spark StreamingSpark Streaming
Spark StreamingPALO IT
 
Elastic Morocco user group meetup June
Elastic Morocco user group meetup JuneElastic Morocco user group meetup June
Elastic Morocco user group meetup JuneAnna Ossowski
 
J1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierJ1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierMS Cloud Summit
 
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASGUSS
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - GenèveaOS Community
 
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc BouchoCellenza
 
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris AZUG FR
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KJulien Anguenot
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesOVHcloud
 
Cours sys 2PPT20.pdf
Cours sys 2PPT20.pdfCours sys 2PPT20.pdf
Cours sys 2PPT20.pdfC00LiMoUn
 

Similaire à Journées SQL Server 2011 Extended Events (20)

Re build Nantes 2013 SQL Server monitoring
Re build Nantes 2013   SQL Server monitoringRe build Nantes 2013   SQL Server monitoring
Re build Nantes 2013 SQL Server monitoring
 
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
System Center 2012 | SCCM : L'inventaire de A à Z avec System Center Configur...
 
LP_Admin_base_données.ppt
LP_Admin_base_données.pptLP_Admin_base_données.ppt
LP_Admin_base_données.ppt
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Azure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmediaAzure Camp 9 Décembre - slides session développeurs webmedia
Azure Camp 9 Décembre - slides session développeurs webmedia
 
Déploiement ELK en conditions réelles
Déploiement ELK en conditions réellesDéploiement ELK en conditions réelles
Déploiement ELK en conditions réelles
 
I don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry piI don't always write reactive application but when I do, it run on raspberry pi
I don't always write reactive application but when I do, it run on raspberry pi
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big DataAzure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
Azure Camp 9 Décembre 2014 - slides session développeurs IOT Big Data
 
Sql azure performance et montee en charge (1)
Sql azure   performance et montee en charge (1)Sql azure   performance et montee en charge (1)
Sql azure performance et montee en charge (1)
 
Spark Streaming
Spark StreamingSpark Streaming
Spark Streaming
 
Elastic Morocco user group meetup June
Elastic Morocco user group meetup JuneElastic Morocco user group meetup June
Elastic Morocco user group meetup June
 
J1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric CharlierJ1 T1 5 - Stream Analytics - Cédric Charlier
J1 T1 5 - Stream Analytics - Cédric Charlier
 
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSASSQLSaturday Paris 2014 - Monitoring et configuration SSAS
SQLSaturday Paris 2014 - Monitoring et configuration SSAS
 
3 Microsoft Advanced Threat Analytics - Genève
3   Microsoft Advanced Threat Analytics - Genève3   Microsoft Advanced Threat Analytics - Genève
3 Microsoft Advanced Threat Analytics - Genève
 
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho[GAB2016] Azure DocumentDB - Jean-Luc Boucho
[GAB2016] Azure DocumentDB - Jean-Luc Boucho
 
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
Jean-Luc Boucho - Azure DocumentDB - Global Azure Bootcamp 2016 Paris
 
Architecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.KArchitecture Big Data open source S.M.A.C.K
Architecture Big Data open source S.M.A.C.K
 
Webinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud DatabasesWebinar - Enterprise Cloud Databases
Webinar - Enterprise Cloud Databases
 
Cours sys 2PPT20.pdf
Cours sys 2PPT20.pdfCours sys 2PPT20.pdf
Cours sys 2PPT20.pdf
 

Journées SQL Server 2011 Extended Events

  • 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 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. 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. 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. 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 • 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. 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. 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. 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. 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. 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. 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. 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
  • 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 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. 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. 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 • 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. 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. 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) • ...
  • 35. Merci à nos Sponsors Rencontrez les dans l’espace partenaires

Notes de l'éditeur

  1. En cas de conflit dans le code entre
  2. Le cloisonnement est d’ailleurs repris dans le XE object model, on a bien la séparation XEStore -> Package / XEStore -> Session
  3. 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.
  4. Anciennement max_memory=4Mb
  5. 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.
  6. 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
  7. Orange - Use for Breakthrough Insight specific content
  8. 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
  9. Orange - Use for Breakthrough Insight specific content