Présentation des événements étendus SQL Server
Les événements étendus SQL Server (événements étendus) représentent un système de gestion d'événements général pour les systèmes serveur. L'infrastructure des événements étendus prend en charge la corrélation de données de SQL Server et, sous certaines conditions, la corrélation de données provenant du système d'exploitation et d'applications de base de données. Dans ce dernier cas, la sortie des Événements étendus doit être dirigée vers le Suivi d'événements pour Windows (ETW) afin de mettre en corrélation les données d'événement avec les données d'événement du système d'exploitation ou des applications.
Toutes les applications ont des points d'exécution qui sont utiles aussi bien à l'intérieur qu'à l'extérieur d'une application. Au sein de l'application, le traitement asynchrone peut être mis en attente à l'aide d'informations rassemblées au cours de l'exécution initiale d'une tâche. En dehors de l'application, les points d'exécution fournissent des utilitaires d'analyse avec des informations sur les caractéristiques comportementales et de performances de l'application analysée.
Les événements étendus prennent en charge l'utilisation de données d'événement à l'extérieur d'un processus. Ces données sont utilisées en général par :
des outils de suivi, tels que SQL Trace et le Moniteur système ;
des outils de journalisation, tels que le journal des événements Windows ou le journal des erreurs SQL Server ;
des utilisateurs qui administrent un produit ou développent des applications sur un produit.
Conception et fonctionnalités d'événements étendus
Les événements étendus présentent les aspects de conception clés suivants :
Le moteur d'événements étendus est agnostique en termes d'événements, ce qui permet au moteur de lier tout événement à toute cible car le moteur n'est pas contraint par le contenu des événements. Pour plus d'informations sur le moteur d'événements étendus, consultez Moteur des Événements étendus SQL Server.
Les événements sont séparés des consommateurs d'événements, appelés cibles dans les événements étendus. Cela signifie que toute cible peut recevoir tout événement. De plus, tout événement déclenché peut être automatiquement consommé par la cible, qui peut enregistrer dans le journal ou fournir un contexte d'événement supplémentaire. Pour plus d'informations, consultez Cibles des Événements étendus SQL Server
Les événements sont distincts de l'action à entreprendre lorsqu'un événement se déclenche. En conséquence, toute action peut être associée à tout événement.
Les prédicats peuvent filtrer dynamiquement le déclenchement des événements, ce qui ajoute à la souplesse de l'infrastructure des événements étendus. Pour plus d'informations, consultez Packages d'événements étendus SQL Server.
Les événements étendus peuvent générer de façon synchrone des données d'événement (et traiter de façon asynchrone ces données), ce qui fournit une solution flexible de gestion des événements. De plus, les événements étendus fournissent les fonctionnalités suivantes :
une approche unifiée de la gestion des événements sur le système serveur, tout en permettant aux utilisateurs d'isoler des événements spécifiques dans le but de résoudre des problèmes ;
l'intégration avec les outils existants de suivi ETW et la prise en charge de ces derniers ;
un mécanisme de gestion des événements entièrement configurable, basé sur Transact-SQL ;
la capacité de surveiller dynamiquement les processus actifs tout en ayant un impact minime sur ces processus.
Utilisation des Événements étendus avec ETW
Si vous souhaitez utiliser des Événements étendus pour la corrélation de données provenant du système d'exploitation et des applications de base de données, il est recommandé d'avoir des connaissances pratiques d'ETW. Le suivi ETW peut être utilisé conjointement avec les Événements étendus ou en tant que consommateur d'événements des Événements étendus. Les rubriques suivantes fournissent un point de départ pour obtenir des informations générales sur le suivi ETW :
Scénarios d'utilisation des Événements étendus
Vous pouvez utiliser les Événements étendus dans un large éventail de scénarios d'analyse et de dépannage. Les scénarios ci-dessous illustrent certaines situations où les événements étendus peuvent fournir des données précieuses pour la résolution des problèmes dans des domaines tels que :
le dépannage de la cause du rognage de la plage de travail ;
la résolution d'un problème d'utilisation excessive du processeur ;
la résolution de problèmes de blocages ;
la mise en corrélation de l'activité de demande avec les journaux de suivi ETW de Windows.
Dépannage de la cause du rognage de la plage de travail
Vous rencontrez de graves problèmes de performances avec votre serveur de production, qui entraînent l'expiration du délai d'attente d'applications clientes. Ces problèmes semblent être transitoires et les performances redeviennent normales après 10-15 minutes.
Vous examinez le journal des erreurs SQL Server et trouvez les messages d'erreur suivants :
« Une partie significative de la mémoire du processus sql server a été hors page. Ce problème peut entraîner une dégradation des performances. Durée : 300 secondes. Utilisation en cours de la mémoire 34 %. »
« Écouteur IOCP improductif. »
[!REMARQUE]
IOCP fait référence à un port de terminaison d'E/S. Ce port traite les demandes d'utilisateur sur le réseau. Le message indique que le port de terminaison est bloqué depuis une minute.
Vous soupçonnez SQL Server de ne pas répondre suffisamment rapidement à une sollicitation de la mémoire sur le serveur. Lorsque vous vérifiez la mémoire à l'aide du Gestionnaire des tâches, la mémoire disponible semble plus que suffisante sur le serveur. Vous essayez de vous connecter à la base de données à partir de SQL Server Management Studio, mais le délai de la tentative de connexion expire. Vous êtes en mesure de vous connecter au serveur en exécutant la commande SQLCMD - A à partir de l'invite de commandes Windows. Cela ouvre une session sur la connexion administrateur dédiée.
Vous décidez d'utiliser les événements étendus pour obtenir plus d'informations. Vous créez une session d'événements étendus qui :
ajoute des événements pour le signal de mémoire système et la modification de la mémoire de serveur totale ;
dirige la sortie vers le suivi ETW. Cette sortie sera écrite dans un fichier créé sur un lecteur qui n'est pas utilisé pour le fichier d'échange ni par les fichiers de base de données SQL Server.
À l'invite de commandes Windows, vous exécutez une instruction pour activer un suivi ETW du noyau Windows avec tous les événements de mémoire. Vous laissez les deux suivis s'exécuter pendant plusieurs minutes, puis fermez la session d'événements étendus et le suivi du noyau Windows.
Vous utilisez tracerpt.exe pour mettre en corrélation le suivi Windows et le suivi ETW SQL Server. Vous recherchez un événement indiquant que la notification de mémoire système insuffisante a été définie, mais ne le trouvez pas. Vous voyez à la place un nombre élevé de défauts de page provenant de tous les processus sur le serveur. Vous examinez les événements juste avant la pagination et détectez que les plages de travail de tous les processus ont été rognées en réponse à une demande d'allocation de mémoire provenant d'un pilote.
Résolution d'un problème d'utilisation excessive du processeur
Vous effectuez des investigations sur l'utilisation excessive du processeur dans votre système de production. Vous utilisez différentes vues de gestion dynamique pour déterminer si l'utilisation du processeur peut être attribuée à des requêtes qui ont été exécutées sur le système. Cet examen indique que la plupart des requêtes sont des requêtes utilisateur ad hoc. Les informations obtenues à partir des vues de gestion dynamique ne sont pas suffisantes pour diagnostiquer le problème.
Vous créez une session d'événements étendus qui :
active des événements pour la saisie semi-automatique des instructions avec des prédicats spécifiant le seuil CPU ;
a une action pour collecter uniquement le plan de requête lorsque l'événement se déclenche ;
écrit toutes les données collectées dans un fichier. Ce fichier se trouve sur un lecteur qui ne contient pas de fichier journal ni de fichier de base de données.
Après avoir démarré la session d'événements étendus, vous examinez la sortie et êtes en mesure de déterminer que la cause du problème de processeur correspond à une conversion de type de données entre deux tables jointes communément.
Résolution de problèmes de blocages
Vous avez reçu des rapports provenant d'utilisateurs qui indiquent que certaines applications retournent des erreurs de blocage. Pour résoudre efficacement ces problèmes, vous décidez de vous concentrer sur les blocages les plus fréquents. Vous créez une session d'événements étendus qui :
configure le suivi des événements de blocage pour la session ;
spécifie une cible d'agrégation qui utilise un identificateur pour le blocage.
Vous exécutez la session d'événements étendus et, une fois que des blocages supplémentaires ont été signalés, vous êtes en mesure d'obtenir des informations de blocage agrégées, ainsi que le graphique de blocage XML complet pour chaque source. Ces informations vous permettent de déterminer les blocages les plus courants et de commencer à travailler sur une solution.
Mise en corrélation de l'activité de demande avec les journaux de suivi ETW de Windows
Vous résolvez un problème de ralentissement d'application sur votre serveur de production et êtes capable de réduire la cause à de longues durées de lecture de disque. Vous créez une session d'événements étendus qui :
ajoute des lectures de disque en tant qu'événement de session ;
envoie les données collectées vers le suivi ETW.
Après avoir démarré la session d'événements étendus, vous exécutez un suivi ETW du noyau Windows. Après 10 minutes, vous arrêtez les deux sessions.
Vous utilisez tracerpt.exe pour fusionner le suivi Windows et le suivi ETW SQL. À partir de ce suivi fusionné, vous êtes en mesure de mettre en corrélation et de suivre les demandes de lecture de SQL Server jusqu'au noyau Windows. Cette analyse indique un délai prolongé avant que la demande d'E/S soit retournée à SQL Server. Ces informations vous permettent de conclure que le problème d'E/S se situe au niveau du chemin d'E/S physique.
Voir aussi