Suivi des données dans ADO.NET

Microsoft.Data.SqlClient permet le traçage de l’accès aux données via la source d’événement Microsoft.Data.SqlClient.EventSource. D’autres composants ADO.NET, tels que les fournisseurs .NET Framework pour Oracle, OLE DB et ODBC, et DataSet, ont leurs propres installations de suivi.

Le traçage d'appels API d'accès aux données peut aider à diagnostiquer les problèmes suivants :

  • discordance de schéma entre le programme client et la base de données ;

  • problèmes d'indisponibilité de base de données ou de bibliothèque réseau ;

  • SQL incorrect qu'il soit en codage dur ou généré par une application ;

  • logique de programmation incorrecte ;

  • Problèmes résultant de l’interaction entre plusieurs composants ADO.NET ou entre ADO.NET et vos propres composants.

Pour prendre en charge plusieurs technologies de traçage, le traçage est extensible, de sorte qu'un développeur peut tracer un problème à tout niveau de la pile d'applications. Bien que le suivi ne soit pas une fonctionnalité exclusivement réservée à ADO.NET, les fournisseurs Microsoft tirent parti des API de suivi et d’instrumentation généralisées.

Pour plus d’informations sur la façon de collecter les traces Microsoft.Data.SqlClient, consultez Activer le suivi EventSource dans SqlClient.

Accès aux informations de diagnostic dans le journal des événements avancés

Utilisez les ID de connexion Microsoft.Data.SqlClient pour mettre en corrélation les événements clients avec les informations de diagnostic du serveur, telles que les échecs de connexion, dans la mémoire tampon de l’anneau de connectivité et le journal des événements étendus. Pour plus d’informations sur la lecture du journal des événements étendus, consultez View Event Session Data.

Pour les opérations de connexion, Microsoft. Data.SqlClient envoie un ID de connexion client pendant l’échange de prélogin. Si la connexion échoue, recherchez le champ ClientConnectionID dans le tampon circulaire de connectivité pour obtenir des informations de diagnostic sur l’échec de la connexion. Les ID de connexion du client sont enregistrés dans la mémoire tampon en anneau uniquement en cas d'erreur. Si une connexion échoue avant l’échange de prélogin, le serveur ne recevra pas l’ID. L'ID de connexion client est un GUID à 16 octets. Vous pouvez également trouver l’ID de connexion client dans la sortie cible des événements étendus si vous ajoutez l’action client_connection_id aux événements dans une session d’événements étendus.

Pour obtenir l’ID de connexion client par programmation, utilisez ClientConnectionId.

L’ID de connexion est disponible pour SqlConnection une fois qu’elle a correctement établi une connexion. Si une tentative de connexion échoue, l’ID peut être disponible via ClientConnectionId.

Microsoft. Data.SqlClient envoie également un ID d’activité spécifique au thread pour les instructions batch et les demandes d’appel de procédure distante (RPC) lorsque sa source d’événement est activée et que le serveur prend en charge les en-têtes de trace. Pour capturer l’ID d’activité dans une session d’événements étendus, activez TRACK_CAUSALITY. Pour les problèmes de performances liés à une connexion active, recherchez l’ID d’activité dans la trace du client, puis dans la sortie des événements étendus. L’ID d’activité contient un GUID de 16 octets et un numéro de séquence de quatre octets. Le numéro de séquence indique l’ordre relatif des requêtes dans un thread. Le mot de configuration de suivi de l'accès aux données hérité ne configure pas la source d’événements de Microsoft.Data.SqlClient.

Voici un exemple qui utilise Transact-SQL pour démarrer une session d'événements étendus. Cette session sera stockée dans une mémoire tampon en anneau et enregistrera l'ID d'activité envoyé par un client lors des opérations RPC et de traitement par lot.

create event session MySession on server
add event connectivity_ring_buffer_recorded,
add event sql_statement_starting (action (client_connection_id)),
add event sql_statement_completed (action (client_connection_id)),
add event rpc_starting (action (client_connection_id)),
add event rpc_completed (action (client_connection_id))
add target ring_buffer with (track_causality=on)

Voir aussi