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 da 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 seguinte consulta no SQL Server Management Studio (SSMS), a extensão MSSQL para Visual Studio Code, sqlcmd ou sua ferramenta de consulta 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 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.
falha_ao_iniciar 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.
conclusão da autenticação por satélite Acionado quando uma autenticação é concluída para uma conexão via TCP ou pipe nomeado.
finalizacao_da_autorizacao_do_satelite 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.
conclusão do recebimento de dados de satélite 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.
conclusão do envio de dados por satélite 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 rastrear erros do SQL Satellite
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 do buffer circular de mensagens
resumo_da_mensagem_de_satélite Informações resumidas sobre mensagens
satellite_message_version_mismatch O campo de versão da mensagem não corresponde
mensagens via satélite Usado para rastrear eventos de mensageria (bind, unbind, etc.)
satellite_partial_message Usado para rastreamento de mensagens parciais em camada de rede
esquema_de_satélite_recebido É acionado quando a mensagem de esquema é recebida e lida 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 é publicada no Launchpad. Informa ao Launchpad que deve iniciar o processo externo e contém a ID da nova sessão.
Mensagem inesperada recebida do satélite 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 conter mensagens de rastreamento do SQL Server, do Launchpad e de processos externos. Isso inclui as saídas stdout e stderr de R.
launchpad_launch_start É acionado quando a plataforma de lançamento começa a lançar 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.

  • Barra inicial do SQL Server

    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 satélite que oferece suporte à extensibilidade do SQL com linguagens de script externas, 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.