Accès aux informations de diagnostic dans le journal des événements étendus
Dans Microsoft JDBC Driver 4.0 pour SQL Server, le traçage (Traçage des opérations de pilote) facilite la mise en corrélation des événements client et des informations de diagnostic. Il est possible de suivre des événements tels que les échecs de connexion provenant de la mémoire tampon en anneau de connectivité du serveur et des informations sur le niveau de performance de l’application dans le journal détaillé des événements. Pour plus d'informations sur la lecture du journal des événements étendus, consultez Événements étendus.
Détails
Pour les opérations de connexion, Pilote Microsoft JDBC pour SQL Server envoie un ID de connexion cliente. En cas d’échec de la connexion, vous pouvez accéder à la mémoire tampon en anneau de connectivité et rechercher le champ ClientConnectionID pour obtenir des informations de diagnostic sur l’échec. Pour plus d’informations sur la mémoire tampon en anneau, consultez Résolution des problèmes de connectivité de SQL Server 2008 avec la mémoire tampon en anneau de connectivité. 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 d’envoyer le paquet de préconnexion, aucun ID de connexion client n’est généré.
L'ID de connexion client est un GUID à 16 octets. Si l’action client_connection_id est ajoutée aux événements dans une session d’événements étendus, l’ID de connexion cliente se trouve dans la sortie de la cible des événements étendus. Pour obtenir plus de diagnostics du pilote client, vous pouvez activer le traçage et réexécuter la commande de connexion afin de voir le champ ClientConnectionID dans la trace.
Vous pouvez obtenir l'ID de connexion du client programmatiquement avec l’interface ISQLServerConnection. L'ID de connexion sera également présent dans toutes les exceptions liées à la connexion.
En cas d’erreur de connexion, l’ID de connexion client dans les informations de trace des diagnostics intégrés du serveur et dans la mémoire tampon en anneau de connectivité peut aider à corréler les connexions clientes aux connexions sur le serveur. Pour plus d’informations sur les traces des diagnostics intégrés, consultez Traçage de l’accès aux données. Notez que cet article contient également des informations sur la trace des accès aux données, qui ne s'applique pas à Pilote Microsoft JDBC pour SQL Server ; consultez Suivi du fonctionnement du pilote pour plus d'informations sur la création d'une trace d'accès aux données avec Pilote Microsoft JDBC pour SQL Server.
Le pilote JDBC envoie également un ID d'activité spécifique au thread. Si la session est démarrée avec l’option TRACK_CAUSAILITY, l’ID d’activité est capturé dans la session d’événements étendus. En cas de problèmes de performance avec une connexion active, vous pouvez obtenir l'ID d'activité de la trace du client (champ ActivityID), puis le localiser dans la sortie d'événements étendus.
L’ID d’activité dans les événements étendus est un GUID sur 16 octets (différent du GUID de l’ID de connexion cliente) suivi d’un numéro séquentiel sur 4 octets. Le numéro séquentiel représente l'ordre d'une demande dans un thread. L'ActivityId est envoyé pour les instructions de lot SQL et les requêtes RPC. Pour activer l’envoi d’ActivityId au serveur, spécifiez la paire clé-valeur suivante dans le fichier Logging.Properties :
com.microsoft.sqlserver.jdbc.traceactivity = on
Toute valeur autre que on
(valeur respectant la casse) désactive l’envoi de l’ActivityId.
Pour plus d'informations, consultez Suivi du fonctionnement du pilote. L'indicateur de trace est utilisé avec les enregistreurs d'objets JDBC correspondants pour décider s'il faut tracer et envoyer l'ActivityId dans le pilote JDBC. En plus de la mise à jour du fichier Logging.Properties, activez l’enregistreur d’événements com.microsoft.sqlserver.jdbc avec au minimum le niveau FINER. Pour envoyer ActivityId au serveur dans le cas de demandes effectuées par une classe donnée, activez l’enregistreur d’événements de classe correspondant avec le niveau FINER ou FINEST. Par exemple, si la classe est SQLServerStatement, activez l'enregistreur com.microsoft.sqlserver.jdbc.SQLServerStatement.
L’exemple suivant utilise Transact-SQL pour démarrer une session d’événements étendus qui est stockée dans une mémoire tampon en boucle et enregistre l’ID d’activité envoyé par un client lors d’opérations par lot et RPC :
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)