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 disparados por processos externos; portanto, devem ser capturados usando 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
conexão_aceitar 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.
satélite_abortar_conexão Cancelar o registro da conexão
aborto_do_satélite_recebido Acionado quando uma mensagem de cancelamento é recebida por meio de uma conexão por satélite.
Comando de abortar enviado ao satélite 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 a autorização é concluída para uma conexão via TCP ou pipe nomeado.
satélite_cleanup É acionado quando a limpeza das chamadas via satélite é executada. Acionado somente a partir de processo externo. Confira instruções sobre a coleta de eventos a partir de processos externos.
dado_de_satélite_bloco_enviado 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
mensagem de satélite consolidada Usado para rastreamento de união de mensagens em camada de rede
registro_buffer_circular_de_mensagem_de_satelite 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 a mensagem de esquema é enviada pelo satélite. Acionado somente a partir de processo externo. Confira instruções sobre a coleta de eventos a partir de processos externos.
início do serviço de satélite publicado É 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 a saída para stdout e stderr do 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.
dado_de_satélite_bloco_enviado 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, o número de linhas, o número de pacotes e o tempo decorrido no envio do bloco.
satellite_sessionId_mismatch O identificador da sessão da mensagem não é esperado

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]).
  • Qualquer número de tags de pacote de evento pode aparecer e será coletado, desde que o atributo name 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.