mardi 15 mai 2012

Les deadlocks !

Pourquoi cette version de SQL Server ? Parce qu'elle voit arriver une nouvelle fonctionnalité appelé XEvents. C'est une fonctionnalité très avancée qui à terme remplacera le système de Trace de SQL Server (SQLtrace utilisé par le Profiler).
Ce composant à l'avantage d'être léger et d'avoir un faible impact sur le moteur de base de données. Et c'est d'ailleurs pourquoi Microsoft a activé par défaut une session XEvents sur toutes les instances SQL Server 2008 et +. Cette session est connu sous le nom de system_health :
SELECT name FROMsys.dm_xe_sessions
Et les évènements qui y sont trace sont les suivant :
  • Toutes les erreurs de sévérité supérieure ou égale à 20 (erreurs critiques)
  • Toutes les erreurs relatives à la mémoire
  • Problème de processus ne cédant pas son tour (non yielding scheduler)
  • Interblocages / Deadlocks
  • Attente sur un latch pour plus de 15 secondes
  • Attente sur un verrou (lock) pour plus de 30 secondes
  • Attentes significatives sur d'autres types
Avec l'avantage pour la plupart de ces évènements de tracer la/les commande(s) SQL impliquée(s) et la pile d'appel le cas échéant.
Pour consulter le contenu du trace, c'est facile, utilisez la requête suivante :
SELECTCAST(xet.target_data asxml) AS xe_content
FROMsys.dm_xe_session_targetsAS xet
JOINsys.dm_xe_sessionsAS xes ON xes.address = xet.event_session_address
WHERE xes.name ='system_health'
Si vous êtes intéressé spécifiquement par les deadlocks, vous n'avez plus qu'à utiliser la requête XQuery ci-dessous :
'/RingBufferTarget/event [@name="xml_deadlock_report"]'

Le buffer qui contient le trace est vidé en fonction de son usage, donc si votre serveur est très sujet à des erreurs critiques et des deadlocks les infos seront peut-être non présente.

Bonne Lecture
Thierry

Aucun commentaire:

Enregistrer un commentaire