Partilhar via


Monitore scripts Python e R com eventos estendidos nos Serviços de Aprendizagem Automática do SQL Server

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

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

Eventos estendidos para os Serviços de Aprendizado de Máquina do SQL Server

Para exibir uma lista de eventos relacionados aos Serviços de Aprendizado de Máquina 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 obter mais informações sobre como usar eventos estendidos, consulte Ferramentas de eventos estendidos.

Eventos adicionais específicos dos Serviços de Aprendizado de Máquina

Eventos estendidos adicionais estão disponíveis para componentes relacionados e usados pelos Serviços de Aprendizagem de Máquina do SQL Server, como o SQL Server Launchpad, o BXLServer e o processo satélite que inicia o runtime do Python ou R. Esses eventos estendidos adicionais são disparados dos processos externos; portanto, eles devem ser capturados usando um utilitário externo.

Para obter mais informações sobre como fazer isso, consulte a seção Coletando eventos de processos externos.

Tabela de eventos estendidos

Event Description Observações
aceitar_conexão Ocorre quando uma nova conexão é aceita. Esse evento serve para registrar todas as tentativas de conexão.
falha_no_lançamento Falha no lançamento. Indica um erro.
interrupção_de_conexão_por_satélite Anular registo de ligação
satélite_abortar_recebido É acionado quando uma mensagem de anulação é recebida através de uma conexão via satélite.
envio_de_cancelamento_de_satélite É acionado quando uma mensagem de interrupção é enviada por conexão via satélite.
conclusão_da_autenticação_por_satélite É acionado quando a autenticação é concluída para uma conexão via TCP ou pipe nomeado.
conclusão de autorização de satélite É acionado quando a autorização é concluída para uma conexão via TCP ou pipe nomeado.
limpeza_de_satélite Ativa quando o satélite chama a limpeza. Demitido apenas de processo externo. Consulte as instruções sobre como coletar eventos de processos externos.
segmento_de_dados_de_satélite_enviado É acionado quando a conexão via satélite termina de enviar um único bloco de dados. O evento relata o número de linhas enviadas, o número de colunas, o número de pacotes SNI utilizados e o tempo decorrido, em milissegundos, durante o envio do bloco. As informações podem ajudá-lo a entender quanto tempo é gasto passando diferentes tipos de dados e quantos pacotes são usados.
conclusão_recebimento_dados_satélite É acionado quando todos os dados necessários por uma consulta são recebidos através da conexão via satélite. Demitido apenas de processo externo. Consulte as instruções sobre como coletar eventos de processos externos.
conclusão_do_envio_de_dados_por_satélite É acionado quando todos os dados necessários para uma sessão são enviados através da conexão via satélite.
dados_satelite_envio_iniciar É acionado quando a transmissão de dados é iniciada. A transmissão de dados começa pouco antes do primeiro bloco de dados ser enviado.
erro_de_satélite Usado para tracejar erro de satélite SQL
satélite_mensagem_tamanho_inválido O tamanho da mensagem não é válido
mensagem_coalescida_de_satélite Usado para rastrear mensagens coalescentes na camada de rede
buffer_de_mensagem_por_satélite_registro_circular registo de buffer circular de mensagem
resumo_mensagem_satélite Informações resumidas sobre mensagens
versão da mensagem de satélite não corresponde O campo de versão da mensagem não corresponde
mensagens via satélite Usado para rastrear eventos de mensagens (bind, unbind, etc.)
mensagem_parcial_do_satélite Usado para rastrear mensagens parciais na camada de rede
satélite_esquema_recebido É acionado quando a mensagem do esquema é recebida e lida pelo SQL.
satellite_schema_sent É acionado quando a mensagem do esquema é enviada pelo satélite. Demitido apenas de processo externo. Consulte as instruções sobre como coletar eventos de processos externos.
início_serviço_satélite_postado É acionado quando a mensagem de inicialização do serviço é publicada no launchpad. Instrui o Launchpad a iniciar o processo externo e contém um ID para a nova sessão.
satélite_mensagem_inesperada_recebida É acionado quando uma mensagem inesperada é recebida. Indica um erro.
stack_trace Ocorre quando um despejo de memória do processo é solicitado. Indica um erro.
trace_event Utilizados para fins de localização Esses eventos podem conter SQL Server, Launchpad e mensagens de rastreamento de processo externo. Isso inclui a saída para stdout e stderr de R.
launchpad_launch_start É acionado quando a plataforma de lançamento inicia o lançamento de um satélite. Demitido apenas do Launchpad. Consulte as instruções sobre como coletar eventos de launchpad.exe.
lançamento_reinício_enviado É acionado quando a plataforma lança o satélite e envia uma mensagem de retoma ao SQL Server. Demitido apenas do Launchpad. Consulte as instruções sobre como coletar eventos de launchpad.exe.
segmento_de_dados_de_satélite_enviado É acionado quando a conexão via satélite termina de enviar um único bloco de dados. Contém informações sobre o número de colunas, número de linhas, número de pacotes e tempo decorrido no envio do bloco.
satellite_sessionId_mismatch O ID de sessão da mensagem não é esperado

Coleta de eventos de processos externos

Os Serviços de Aprendizado de Máquina 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 colocar o arquivo no mesmo diretório que o executável para o processo.

Importante

A partir do SQL Server 2019, o mecanismo de isolamento foi alterado. Portanto, você precisa dar permissões apropriadas para o diretório onde o arquivo de configuração de rastreamento de eventos está armazenado. Para obter mais informações sobre como definir essas permissões, consulte a seção Permissões de arquivo no SQL Server 2019 no Windows: alterações de isolamento para Serviços de Aprendizado de Máquina.

  • Barra Inicial do SQL Server

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

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

  • BXLServer é o processo satélite que suporta extensibilidade SQL com linguagens de script externas, como R ou Python. Uma instância separada de BxlServer é executada para cada instância de idioma externo.

    Para capturar eventos relacionados ao BXLServer, coloque o arquivo .xml no diretório de instalação R ou Python. Em uma instalação padrão, isso 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 ser nomeado o mesmo que o 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 em si 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 para o nome da sessão, o espaço reservado para o nome do arquivo ([SessionName].xel) e os nomes dos eventos que você deseja capturar, Por exemplo, [XEvent Name 1][XEvent Name 1], ).
  • Qualquer quantidade de tags do pacote de eventos pode surgir e será recolhida, desde que o atributo "name" esteja correto.

Exemplo: Capturando eventos do Launchpad

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

Exemplo: Capturando eventos BXLServer

O exemplo a seguir mostra a definição de um rastreamento de evento 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.
  • Este arquivo deve ser nomeado bxlserver.xevents.xml.

Próximos passos