Compartilhar via


Monitorar scripts do Python e do R com eventos estendidos nos Serviços de Machine Learning do SQL Server

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores Instância Gerenciada de SQL do Azure

Saiba como usar eventos estendidos para monitorar e solucionar problemas de operações relacionadas aos scripts externos de trabalhos nos Serviços de Machine Learning do SQL Server, no SQL Server Launchpad, no Python ou no R.

Eventos estendidos para os Serviços de Machine Learning do SQL Server

Para exibir uma lista de eventos relacionados aos Serviços de Machine Learning do SQL Server, execute a consulta a seguir no Azure Data Studio ou no 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';

Para saber mais sobre como usar eventos estendidos, confira Ferramentas de eventos estendidos.

Eventos adicionais específicos para os Serviços de Machine Learning

Os eventos estendidos adicionais estão disponíveis para os componentes relacionados e usados pelos Serviços de Machine Learning do SQL Server, como o SQL Server Launchpad, o BXLServer e o processo de satélite que inicia o runtime do Python ou do R. Esses eventos estendidos adicionais são acionados nos processos externos. Portanto, eles devem ser capturados com um utilitário externo.

Para saber mais sobre como fazer isso, confira a seção Coletar eventos de processos externos.

Tabela de eventos estendidos

Evento Descrição Observações
connection_accept Ocorre quando uma nova conexão é aceita. Este evento serve para registrar todas as tentativas de conexão.
failed_launching Falha na inicialização. Indica um erro.
satellite_abort_connection Cancelar o registro da conexão
satellite_abort_received Acionado quando uma mensagem de cancelamento é recebida por meio de uma conexão por satélite.
satellite_abort_sent Acionado quando uma mensagem de cancelamento é enviada por meio de uma conexão por satélite.
satellite_authentication_completion Acionado quando uma autenticação é concluída para uma conexão via TCP ou pipe nomeado.
satellite_authorization_completion Acionado quando uma autorização é concluída para uma conexão via TCP ou pipe nomeado.
satellite_cleanup Acionado durante a limpeza das chamadas por satélite. Acionado somente a partir de processo externo. Confira instruções sobre a coleta de eventos a partir de processos externos.
satellite_data_chunk_sent Acionado quando a conexão por satélite conclui o envio de uma única parte de dados. O evento informa o número de linhas enviadas, o número de colunas, o número de pacotes SNI utilizados e o tempo decorrido durante o envio da parte, em milissegundos. As informações podem ajudá-lo a compreender quanto tempo é gasto para passar diferentes tipos de dados e quantos pacotes são usados.
satellite_data_receive_completion Acionado quando todos os dados necessários de uma consulta são recebidos por meio de uma conexão por satélite. Acionado somente a partir de processo externo. Confira instruções sobre a coleta de eventos a partir de processos externos.
satellite_data_send_completion Acionado quando todos os dados necessários de uma sessão são enviados por meio de uma conexão por satélite.
satellite_data_send_start Dispara quando a transmissão de dados é iniciada. A transmissão de dados começa logo antes da primeira parte dos dados ser enviada.
satellite_error Usado para rastreamento de erro de satélite do SQL
satellite_invalid_sized_message O tamanho da mensagem não é válido
satellite_message_coalesced Usado para rastreamento de união de mensagens em camada de rede
satellite_message_ring_buffer_record Registro de buffer de anéis de mensagem
satellite_message_summary Informações resumidas sobre mensagens
satellite_message_version_mismatch O campo de versão da mensagem não é correspondente
satellite_messaging Usado para evento de rastreamento de mensagens (associar, desassociar etc.)
satellite_partial_message Usado para rastreamento de mensagens parciais em camada de rede
satellite_schema_received Acionado quando o esquema de mensagens é recebido e lido pelo SQL.
satellite_schema_sent Acionado quando o esquema de mensagens é enviado pelo satélite. Acionado somente a partir de processo externo. Confira instruções sobre a coleta de eventos a partir de processos externos.
satellite_service_start_posted Acionado quando a mensagem de início do serviço é postada no Launchpad. Informa ao Launchpad que deve iniciar o processo externo e contém a ID da nova sessão.
satellite_unexpected_message_received Acionado quando uma mensagem inesperada é recebida. Indica um erro.
stack_trace Ocorre quando o despejo de memória do processo é solicitado. Indica um erro.
trace_event Usado para fins de rastreamento Esses eventos podem incluir o SQL Server, o Launchpad e o rastreamento de processos externos. Isso inclui as saídas stdout e stderr de R.
launchpad_launch_start Acionado quando o Launchpad começa a inicializar um satélite. Acionado somente a partir do Launchpad. Confira instruções sobre a coleta de eventos a partir do arquivo launchpad.exe.
launchpad_resume_sent Acionado quando o Launchpad inicializa o satélite e envia uma mensagem resumida para o SQL Server. Acionado somente a partir do Launchpad. Confira instruções sobre a coleta de eventos a partir do arquivo launchpad.exe.
satellite_data_chunk_sent Acionado quando a conexão por satélite conclui o envio de uma única parte de dados. Contém informações sobre o número de colunas, de linhas, de pacotes e o tempo decorrido com o envio das partes.
satellite_sessionId_mismatch A ID da sessão da mensagem não é esperada

Coletar eventos de processos externos

Os Serviços de Machine Learning do SQL Server iniciam alguns serviços que são executados fora do processo do SQL Server. Para capturar eventos relacionados a esses processos externos, você deve criar um arquivo de configuração de rastreamento de eventos e colocá-lo no mesmo diretório do executável do processo.

Importante

A partir do SQL Server 2019, o mecanismo de isolamento foi alterado. Portanto, você precisa fornecer as permissões apropriadas para o diretório no qual o arquivo de configuração de rastreamento de eventos está armazenado. Para obter mais informações sobre como definir essas permissões, confira a seção Permissões de arquivo em SQL Server 2019 no Windows: alterações de isolamento nos Serviços de Machine Learning.

  • SQL Server Launchpad

    Para capturar eventos relacionados ao Launchpad, coloque o arquivo .xml no diretório Binn da instância do SQL Server. Em uma instalação padrão, seria:

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

  • O BXLServer é o processo de satélite compatível com a extensibilidade do SQL com linguagens de script externo, como R ou Python. Uma instância separada do BxlServer será iniciada para cada instância de linguagem externa.

    Para capturar eventos relacionados ao BXLServer, coloque o arquivo .xml no diretório de instalação do R ou do Python. Em uma instalação padrão, seria:

    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.

O arquivo de configuração deve ter o mesmo nome do executável, usando o formato "[nome].xevents.xml". Em outras palavras, os arquivos devem ser nomeados da seguinte forma:

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

O arquivo de configuração tem o seguinte 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 o rastreamento, edite o espaço reservado nome da sessão, o espaço reservado para o nome do arquivo ([SessionName].xel) e os nomes dos eventos que deseja capturar (como [XEvent Name 1], [XEvent Name 1]).
  • Várias marcas do pacote do evento podem ser exibidas e serão coletadas, desde que o atributo de nome esteja correto.

Exemplo: Capturar eventos do Launchpad

O exemplo a seguir mostra a definição de um rastreamento de eventos para o serviço do 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 o arquivo .xml no diretório Binn da instância do SQL Server.
  • Esse arquivo deve ser nomeado Launchpad.xevents.xml.

Exemplo: Capturar eventos do BXLServer

O exemplo a seguir mostra a definição de um rastreamento de eventos para o executável 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 o arquivo .xml no mesmo diretório que o executável BXLServer.
  • Esse arquivo deve ser nomeado bxlserver.xevents.xml.

Próximas etapas