Surveiller les scripts Python et R avec des événements étendus dans SQL Server Machine Learning Services

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL Managed Instance

Découvrez comment utiliser des événements étendus pour surveiller et résoudre les problèmes liés à SQL Server Machine Learning Services, à SQL Server Launchpad et aux scripts externes des travaux R ou Python.

Événements étendus pour SQL Server Machine Learning Services

Pour afficher la liste des événements liés à SQL Server Machine Learning Services, exécutez la requête suivante depuis Azure Data Studio ou SQL Server Management Studio.

SELECT o.name AS event_name, o.description
FROM sys.dm_xe_objects o
JOIN sys.dm_xe_packages p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
AND p.name = 'SQLSatellite';

Pour plus d’informations sur l’utilisation des événements étendus, consultez Outils associés aux événements étendus.

Événements supplémentaires spécifiques à Machine Learning Services

Des événements étendus supplémentaires sont disponibles pour les composants liés à SQL Server Machine Learning Services et utilisés par ces derniers, tels que SQL Server Launchpadet BXLServer, et le processus satellite qui démarre le runtime Python ou R. Ces événements étendus supplémentaires sont déclenchés à partir des processus externes. Par conséquent, ils doivent être capturés à l’aide d’un utilitaire externe.

Pour plus d’informations sur cette opération, consultez la section Collecte d’événements à partir de processus externes.

Tableau des événements étendus

Événement Description Notes
connection_accept Se produit lorsqu’une nouvelle connexion est acceptée. Cet événement permet de journaliser toutes les tentatives de connexion.
failed_launching Le lancement a échoué. Indique une erreur.
satellite_abort_connection Enregistrement d’abandon de connexion
satellite_abort_received Se déclenche lorsqu’un message d’abandon est reçu sur une connexion satellite.
satellite_abort_sent Se déclenche lorsqu’un message d’abandon est envoyé sur une connexion satellite.
satellite_authentication_completion Se déclenche lorsque l'authentification est terminée pour une connexion sur TCP ou canal nommé.
satellite_authorization_completion Se déclenche lorsque l'autorisation est effectuée pour une connexion sur TCP ou canal nommé.
satellite_cleanup Se déclenche lorsque le satellite appelle la fonction de nettoyage. Déclenché uniquement à partir de processus externes. Consultez les instructions sur la collecte d'événements à partir de processus externes.
satellite_data_chunk_sent Se déclenche lorsque la connexion satellite termine l'envoi d'un bloc de données unique. L’événement indique le nombre de lignes envoyées, le nombre de colonnes, le nombre de paquets SNI utilisés et le temps écoulé en millisecondes pendant l’envoi du bloc. Ces informations peuvent vous aider à comprendre le temps nécessaire à la transmission des différents types de données, ainsi que le nombre de paquets utilisés.
satellite_data_receive_completion Se déclenche lorsque toutes les données requises par une requête sont reçues sur la connexion satellite. Déclenché uniquement à partir de processus externes. Consultez les instructions sur la collecte d'événements à partir de processus externes.
satellite_data_send_completion Se déclenche lorsque toutes les données requises pour une session sont envoyées sur la connexion satellite.
satellite_data_send_start Se déclenche lorsque la transmission des données démarre. La transmission des données démarre juste avant l’envoi du premier bloc de données.
satellite_error Utilisé pour le traçage des erreurs de satellite sql
satellite_invalid_sized_message La taille du message n’est pas valide
satellite_message_coalesced Utilisé pour fusionner les messages de traçage sur la couche réseau
satellite_message_ring_buffer_record Enregistrement de la mémoire tampon en anneau du message
satellite_message_summary Informations récapitulatives de la messagerie
satellite_message_version_mismatch Le champ de version du message ne correspond pas
satellite_messaging Utilisé pour le traçage des événements de messagerie (lier, dissocier, etc.)
satellite_partial_message Utilisé pour le traçage des messages partiels sur la couche réseau
satellite_schema_received Se déclenche lorsque le message de schéma est reçu et lu par SQL.
satellite_schema_sent Se déclenche lorsque le message de schéma est envoyé par le satellite. Déclenché uniquement à partir de processus externes. Consultez les instructions sur la collecte d'événements à partir de processus externes.
satellite_service_start_posted Se déclenche lorsque le message de démarrage de service est envoyé à Launchpad. Ce message indique à Launchpad de démarrer le processus externe, et contient un ID pour la nouvelle session.
satellite_unexpected_message_received Se déclenche lors de la réception d'un message inattendu. Indique une erreur.
stack_trace Se produit lors d'une demande de vidage mémoire pour le processus. Indique une erreur.
trace_event Utilisé à des fins de traçage Ces événements peuvent contenir des messages de trace de SQL Server, de Launchpad et de processus externes. Cela comprend la sortie vers stdout et stderr à partir de R.
launchpad_launch_start Se déclenche lorsque Launchpad démarre le lancement d’un satellite. Déclenché uniquement à partir de Launchpad. Consultez les instructions sur la collecte d'événements à partir de launchpad.exe.
launchpad_resume_sent Se déclenche lorsque launchpad a lancé le satellite et envoyé un message de reprise à SQL Server. Déclenché uniquement à partir de Launchpad. Consultez les instructions sur la collecte d'événements à partir de launchpad.exe.
satellite_data_chunk_sent Se déclenche lorsque la connexion satellite termine l'envoi d'un bloc de données unique. Contient des informations sur le nombre de colonnes, le nombre de lignes, le nombre de paquets et le temps écoulé pour l’envoi du bloc.
satellite_sessionId_mismatch L’ID de session du message n’est pas attendu

Collecte d’événements à partir de processus externes

SQL Server Machine Learning Services démarre des services s’exécutant à l’extérieur du processus SQL Server. Pour capturer les événements liés à ces processus externes, vous devez créer un fichier de configuration de traçage des événements et placer le fichier dans le même répertoire que l’exécutable du processus.

Important

À partir de SQL Server 2019, le mécanisme d’isolation a changé. Il est par conséquent nécessaire d’accorder les autorisations appropriées au répertoire dans lequel est stocké le fichier de configuration du suivi d’événements. Pour savoir comment définir ces autorisations, consultez la section Autorisations de fichiers dans SQL Server 2019 sur Windows : Modifications de l’isolation dans Machine Learning Services.

  • SQL Server Launchpad

    Pour capturer les événements liés à Launchpad, placez le fichier .xml dans le répertoire Binn de l’instance SQL Server. Dans une installation par défaut, il s’agit de :

    C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\MSSQL\Binn.

  • BXLServer est le processus satellite qui prend en charge l’extensibilité SQL avec des scripts de langage externes tels que R ou Python. Une instance distincte de BxlServer est lancée pour chaque instance de langage externe.

    Pour capturer les événements liés à BXLServer, placez le fichier .xml dans le répertoire d’installation de R ou de Python. Dans une installation par défaut, il s’agit de :

    R : C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64.

    Python : C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\PYTHON_SERVICES\Lib\site-packages\revoscalepy\rxLibs.

Le fichier de configuration doit porter le même nom que le fichier exécutable, avec le format « [nom].xevents.xml ». En d'autres termes, les fichiers doivent être nommés comme suit :

  • Launchpad.xevents.xml
  • bxlserver.xevents.xml

Le fichier de configuration lui-même a le format suivant :

<?xml version="1.0" encoding="utf-8"?>  
<event_sessions>  
<event_session name="[session name]" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">  
    <description owner="you">Xevent for launchpad or bxl server.</description>  
    <event package="SQLSatellite" name="[XEvent Name 1]" />  
    <event package="SQLSatellite" name="[XEvent Name 2]" />  
    <target package="package0" name="event_file">  
      <parameter name="filename" value="[SessionName].xel" />  
      <parameter name="max_file_size" value="10" />  
      <parameter name="max_rollover_files" value="10" />  
    </target>  
  </event_session>  
</event_sessions>  
  • Pour configurer la trace, modifiez l’espace réservé nom de session, l’espace réservé pour le nom de fichier ([SessionName].xel) et les noms des événements que vous voulez capturer (par exemple [XEvent Name 1], [XEvent Name 1]).
  • Un nombre quelconque de balises de packages d’événement peut apparaître. Elles seront collectées tant que l’attribut de nom est correct.

Exemple : Capture des événements de Launchpad

L’exemple suivant montre la définition d’une trace d’événements pour le service Launchpad :

<?xml version="1.0" encoding="utf-8"?>  
<event_sessions>  
<event_session name="sqlsatelliteut" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">  
    <description owner="hay">Xevent for sql tdd runner.</description>  
    <event package="SQLSatellite" name="launchpad_launch_start" />  
    <event package="SQLSatellite" name="launchpad_resume_sent" />  
    <target package="package0" name="event_file">  
      <parameter name="filename" value="launchpad_session.xel" />  
      <parameter name="max_file_size" value="10" />  
      <parameter name="max_rollover_files" value="10" />  
    </target>  
  </event_session>  
</event_sessions>  
  • Placez le fichier .xml dans le répertoire Binn de l’instance SQL Server.
  • Ce fichier doit être nommé Launchpad.xevents.xml.

Exemple : Capture des événements de BXLServer

L'exemple suivant montre la définition d'une trace d'événements pour le service BXLServer.

<?xml version="1.0" encoding="utf-8"?>  
<event_sessions>  
 <event_session name="sqlsatelliteut" maxMemory="1" dispatchLatency="1" MaxDispatchLatency="2 SECONDS">  
    <description owner="hay">Xevent for sql tdd runner.</description>  
    <event package="SQLSatellite" name="satellite_abort_received" />  
    <event package="SQLSatellite" name="satellite_authentication_completion" />  
    <event package="SQLSatellite" name="satellite_cleanup" />  
    <event package="SQLSatellite" name="satellite_data_receive_completion" />  
    <event package="SQLSatellite" name="satellite_data_send_completion" />  
    <event package="SQLSatellite" name="satellite_data_send_start" />  
    <event package="SQLSatellite" name="satellite_schema_sent" />   
    <event package="SQLSatellite" name="satellite_unexpected_message_received" />    
    <event package="SQLSatellite" name="satellite_data_chunk_sent" />   
    <target package="package0" name="event_file">  
      <parameter name="filename" value="satellite_session.xel" />  
      <parameter name="max_file_size" value="10" />  
      <parameter name="max_rollover_files" value="10" />  
    </target>  
  </event_session>  
</event_sessions>  
  • Placez le fichier .xml dans le même répertoire que l’exécutable de BXLServer.
  • Ce fichier doit être nommé bxlserver.xevents.xml.

Étapes suivantes