Supervisar scripts de Python o R con eventos extendidos en SQL Server Machine Learning Services

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores de Azure SQL Managed Instance

Obtenga información sobre cómo usar eventos extendidos para supervisar y solucionar problemas de operaciones relacionadas con los scripts externos de trabajos de Python o R, SQL Server Machine Learning Services y SQL Server Launchpad.

Eventos extendidos para SQL Server Machine Learning Services

Para ver una lista de eventos relacionados con SQL Server Machine Learning Services, ejecute la siguiente consulta en SQL Server Management Studio (SSMS), la extensión MSSQL para Visual Studio Code, sqlcmd o la herramienta de consulta de T-SQL favorita.

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';

Para obtener más información sobre cómo usar eventos extendidos, vea Herramientas de eventos extendidos.

Eventos adicionales específicos de Machine Learning Services

Hay eventos extendidos adicionales disponibles para los componentes que están relacionados y que se usan en SQL Server Machine Learning Services, como SQL Server Launchpad y BXLServer, y el proceso satélite que inicia el entorno de ejecución de R o Python. Estos eventos extendidos adicionales se generan por procesos externos; por lo tanto, se deben capturar mediante una utilidad externa.

Para obtener más información sobre cómo hacerlo, vea la sección Recopilar eventos de procesos externos.

Tabla de eventos extendidos

Evento Descripción Notas
connection_accept Se produce cuando se acepta una conexión nueva. Este evento sirve para registrar todos los intentos de conexión.
Error al iniciar Error de inicio. Indica un error.
satélite_abortar_conexión Anula el registro de conexión.
se recibió la señal de aborto del satélite Se activa cuando se recibe un mensaje de interrupción a través de una conexión por satélite.
satellite_abort_sent Se activa cuando se envía un mensaje de cancelación a través de una conexión por satélite.
satellite_authentication_completion Se activa cuando se completa la autenticación para una conexión a través de TCP o una canalización con nombre.
finalización de la autorización del satélite Se activa cuando se completa la autorización para una conexión a través de TCP o una canalización con nombre.
limpieza_de_satélites Se activa cuando el satélite solicita la limpieza. Se activa solo desde procesos externos. Consulte las instrucciones sobre la colección de eventos desde procesos externos.
fragmento_datos_satélite_enviado Se activa cuando la conexión por satélite termina de enviar un único fragmento de datos. El evento notifica el número de filas enviadas, el número de columnas, el número de paquetes SNI usados y el tiempo transcurrido en milisegundos al enviar el fragmento. La información puede ayudarle a comprender cuánto tiempo se dedicó a pasar distintos tipos de datos, y cuántos paquetes se usaron.
recepción_de_datos_satelitales_completada Se activa cuando se reciben todos los datos requeridos por una consulta a través de la conexión por satélite. Se activa solo desde procesos externos. Consulte las instrucciones sobre la colección de eventos desde procesos externos.
finalización del envío de datos por satélite Se activa cuando se envían todos los datos necesarios para una sesión a través de la conexión por satélite.
satellite_data_send_start Se activa cuando comienza la transmisión de datos. La transmisión de datos se inicia justo antes de enviarse el primer fragmento de datos.
satellite_error Se utiliza para rastrear errores de satélite SQL.
mensaje_de_tamaño_no_válido_del_satélite El tamaño del mensaje no es válido.
satellite_message_coalesced Se utiliza para realizar un seguimiento de la fusión de mensajes en la capa de red.
registro_de_búfer_circular_de_mensajes_satélite Registro del búfer circular de mensajes
satellite_message_summary Información de resumen sobre la mensajería.
incompatibilidad de versión del mensaje satelital El campo de versión del mensaje no coincide.
mensajería_por_satélite Se usa para realizar un seguimiento de eventos de mensajería (vincular, desvincular, etc.).
satellite_partial_message Se utiliza para realizar un seguimiento de los mensajes parciales en la capa de red.
esquema_satélite_recibido Se activa cuando SQL recibe y lee un mensaje de esquema.
satellite_schema_sent Se activa cuando el satélite envía un mensaje de esquema. Se activa solo desde procesos externos. Consulte las instrucciones sobre la colección de eventos desde procesos externos.
Inicio del servicio por satélite publicado Se activa cuando se publica en Launchpad un mensaje de inicio de servicio. Así se indica a Launchpad que inicie el proceso externo y contiene un id. para la nueva sesión.
Se recibió un mensaje inesperado del satélite Se activa cuando se recibe un mensaje inesperado. Indica un error.
stack_trace Se produce cuando se solicita un volcado de memoria del proceso. Indica un error.
trace_event Se utiliza para realizar el seguimiento. Estos eventos pueden contener mensajes de seguimiento de procesos externos, de Launchpad y de SQL Server. Esto incluye la salida de R a stdout y stderr.
launchpad_launch_start Se activa cuando Launchpad empieza a lanzar un satélite. Se ejecuta solo desde Launchpad. Consulte las instrucciones sobre la recopilación de eventos desde launchpad.exe.
launchpad_resume_sent Se activa cuando Launchpad ha iniciado el satélite y ha enviado un mensaje de reanudación a SQL Server. Se activa solo desde Launchpad. Consulte las instrucciones sobre la recopilación de eventos desde launchpad.exe.
fragmento_datos_satélite_enviado Se activa cuando la conexión por satélite termina de enviar un único fragmento de datos. Contiene información sobre el número de columnas, de filas y de paquetes, así como del tiempo necesitado para enviar el fragmento.
satellite_sessionId_mismatch No se esperaba el identificador de sesión del mensaje

Recopilar eventos desde procesos externos

SQL Server Machine Learning Services inicia algunos servicios que se ejecutan fuera del proceso de SQL Server. Para capturar eventos relacionados con estos procesos externos, debe crear un archivo de configuración de seguimiento de eventos y colocarlo en el mismo directorio que el archivo ejecutable del proceso.

Importante

A partir de SQL Server 2019, el mecanismo de aislamiento ha cambiado. Por lo tanto, debe conceder los permisos adecuados al directorio donde se almacena el archivo de configuración de seguimiento de eventos. Para más información sobre cómo establecer estos permisos, consulte la sección sobre los permisos de archivo en SQL Server 2019 en Windows: Cambios de aislamiento para Machine Learning Services.

  • SQL Server Launchpad

    Para capturar los eventos relacionados con Launchpad, coloque el archivo .xml en el directorio Binn de la instancia de SQL Server. En una instalación predeterminada, este sería:

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

  • BXLServer es el proceso satélite que admite la extensibilidad de SQL con lenguajes de script externos, como R o Python. Se inicia una instancia independiente de BxlServer para cada instancia de lenguaje externo.

    Para capturar los eventos relacionados con BXLServer, coloque el archivo .xml en el directorio de instalación de R o Python. En una instalación predeterminada, este sería:

    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.

El archivo de configuración se debe llamar igual que el ejecutable, con el formato "[nombre].xevents.xml". Dicho de otro modo, los archivos deben tener el siguiente nombre:

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

El propio archivo de configuración presenta el siguiente formato:

<?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>  
  • Para configurar el seguimiento, edite el marcador de posición nombre sesión, el marcador de posición del nombre de archivo ([SessionName].xel) y los nombres de los eventos que quiere capturar (por ejemplo, [XEvent Name 1], [XEvent Name 1]).
  • Puede aparecer cualquier cantidad de etiquetas del paquete de eventos, y se recogerán siempre que el atributo name sea correcto.

Ejemplo: Capturar eventos de Launchpad

En el siguiente ejemplo se muestra la definición de un seguimiento de eventos para el servicio 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>  
  • Coloque el archivo .xml en el directorio Binn de la instancia de SQL Server.
  • Este archivo debe tener el nombre Launchpad.xevents.xml.

Ejemplo: Capturar eventos de BXLServer

En el siguiente ejemplo se muestra la definición de un seguimiento de eventos para el ejecutable 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>  
  • Coloque el archivo .xml en el mismo directorio que el ejecutable BXLServer.
  • Este archivo debe tener el nombre bxlserver.xevents.xml.