Мониторинг скриптов Python и R с использованием расширенных событий в Службах машинного обучения SQL Server

Применимо к: SQL Server 2016 (13.x) и более поздним версиям Управляемый экземпляр SQL Azure

Сведения о том, как использовать расширенные события для мониторинга операций, относящихся к службам машинного обучения SQL Server, панели запуска SQL Server и внешним скриптам заданий Python или R, а также устранять связанные с такими операциями неполадки.

Расширенные события для служб машинного обучения SQL Server

Чтобы просмотреть список событий, связанных со службами машинного обучения SQL Server, выполните следующий запрос в SQL Server Management Studio (SSMS),расширение MSSQL для Visual Studio Code, sqlcmd или любимое средство запросов T-SQL.

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

Дополнительные сведения об использовании расширенных событий см. в статье Средства расширенных событий.

Дополнительные события, относящиеся к службам машинного обучения

Дополнительные расширенные события доступны для компонентов, связанных со службами машинного обучения SQL Server и используемых ими, таких как SQL Server Launchpad, BXLServer, а также сателлитный процесс, который запускает среду выполнения Python или R. Такие дополнительные расширенные события вызываются из внешних процессов и, соответственно, должны записываться внешней служебной программой.

Дополнительные сведения см. в разделе Сбор событий из внешних процессов.

Таблица расширенных событий

Мероприятие Описание Примечания
Принять подключение Происходит при принятии нового подключения. Это событие регистрирует все попытки подключения.
failed_launching Сбой при запуске. Указывает на ошибку.
спутник_прервать_соединение Прервать запись о подключении
Получен сигнал прерывания спутниковой связи Срабатывает при получении сообщения об отмене по спутниковому соединению.
Команда прерывания спутника отправлена Срабатывает при отправке сообщения о прерывании по спутниковому соединению.
Завершение аутентификации спутника Срабатывает при завершении проверки подлинности для подключения по TCP или именованному каналу.
satellite_authorization_completion Возникает при завершении авторизации для подключения по протоколу TCP или через именованный канал.
очистка_спутника Срабатывает, когда вызовы satellite запускают очистку. Активируется только внешним процессом. См. инструкции по сбору событий из внешних процессов.
фрагмент спутниковых данных отправлен Срабатывает, когда спутниковое соединение завершает отправку одного блока данных. При отправке фрагмента данных событие сообщает число строк, столбцов, использованных пакетов SNI и затраченное время в миллисекундах. Эти сведения помогут вам понять, сколько времени потрачено при передаче различных типов данных и сколько пакетов использовано.
завершение_получения_спутниковых_данных Срабатывает, когда все данные, необходимые для запроса, получены через спутниковое соединение. Активируется только внешним процессом. См. инструкции по сбору событий из внешних процессов.
завершение_отправки_спутниковых_данных Срабатывает, когда все необходимые для сеанса данные отправлены через спутниковое соединение.
Начало отправки спутниковых данных Срабатывает при начале передачи данных. Передача данных начинается непосредственно перед отправкой первого блока данных.
ошибка_спутника Используется для трассировки ошибки SQL Satellite.
satellite_invalid_sized_message Недопустимый размер сообщения.
satellite_message_coalesced Используется для трассировки сообщений, объединяющихся на сетевом уровне.
запись кольцевого буфера спутниковых сообщений Запись в кольцевом буфере сообщений.
satellite_message_summary Сводные сведения об обмене сообщениями.
несоответствие версии сообщения спутника Поля версии сообщения не совпадают.
спутниковые_сообщения Используется для трассировки событий при обмене сообщениями (привязка, отмена привязки и т. д.).
satellite_partial_message Используется для трассировки неполных сообщений на сетевом уровне.
Схема спутника получена Срабатывает, когда SQL получает и считывает сообщение схемы.
схема_спутника_отправлена Срабатывает, когда спутник отправляет сообщение схемы. Активируется только внешним процессом. См. инструкции по сбору событий из внешних процессов.
satellite_service_start_posted Срабатывает, когда на панели запуска публикуется сообщение о запуске службы. Это событие содержит идентификатор для нового сеанса и указывает панели запуска на запуск внешнего процесса.
Получено неожиданное сообщение со спутника Срабатывает при получении неожиданного сообщения. Указывает на ошибку.
stack_trace Возникает при выполнении запроса на создание дампа памяти процесса. Указывает на ошибку.
trace_event Используется для целей трассировки Эти события могут содержать сообщения трассировки SQL Server, Launchpad и внешних процессов. К ним относится вывод в stdout и stderr из кода R.
launchpad_launch_start Срабатывает, когда стартовая площадка начинает запуск спутника. Активируется только на панели запуска. См. инструкции по сбору событий из launchpad.exe.
Отправлена команда на возобновление Launchpad. Срабатывает, когда Launchpad запустило спутник и отправило SQL Server сообщение о возобновлении. Активируется только на панели запуска. См. инструкции по сбору событий из launchpad.exe.
фрагмент спутниковых данных отправлен Срабатывает, когда спутниковое соединение завершает отправку одного блока данных. Содержит сведения о количестве столбцов, строк, пакетов и продолжительности отправки блока данных.
satellite_sessionId_mismatch Идентификатор сеанса сообщения не ожидается.

Сбор событий из внешних процессов

Службы машинного обучения SQL Server запускают некоторые службы, которые выполняются вне процесса SQL Server. Чтобы записывать события, связанные с этими внешними процессами, необходимо создать файл конфигурации трассировки событий и поместить его в тот же каталог, в котором находится исполняемый файл для процесса.

Внимание

Начиная с версии SQL Server 2019 механизм изоляции изменился. Поэтому необходимо предоставить соответствующие разрешения для каталога, в котором хранится файл конфигурации трассировки событий. Дополнительные сведения о настройке этих разрешений см. в разделе "Разрешения файлов" в SQL Server 2019 в Windows: изменения изоляции для служб машинного обучения.

  • Панель запуска SQL Server

    Чтобы фиксировать события, связанные с панелью запуска, поместите файл конфигурации (XML-файл) в каталог Binn экземпляра SQL Server. При стандартной установке это будет:

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

  • BXLServer — это вспомогательный процесс, который поддерживает возможность расширения SQL с помощью внешних языков скриптов, таких как R и Python. Для каждого экземпляра внешнего языка запускается отдельный экземпляр BxlServer.

    Чтобы записывать события, связанные с BXLServer, поместите файл конфигурации (XML-файл) в установочный каталог R или Python. При стандартной установке это будет:

    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.

Имена файла конфигурации и исполняемого файла должны совпадать и записываться в формате [имя].xevents.xml. Другими словами, имя файла должно выглядеть следующим образом:

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

Файл конфигурации имеет следующий формат:

<?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>  
  • Чтобы настроить трассировку, измените заполнитель session name, заполнитель для имени файла ([SessionName].xel) и имена событий, которые требуется записывать (например, [XEvent Name 1], [XEvent Name 1]).
  • Может появиться любое количество тегов пакетов событий. Все они будут собираться при условии, что атрибут имени правильный.

Пример. Фиксация событий панели запуска

В следующем примере представлено определение трассировки событий для службы панели запуска:

<?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>  
  • Поместите XML-файл в каталог Binn экземпляра SQL Server.
  • Этот файл должен иметь имя Launchpad.xevents.xml.

Пример. Фиксация событий BXLServer

В следующем примере представлено определение трассировки событий для исполняемого файла 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>  
  • Поместите XML-файл в тот же каталог, в котором находится исполняемый файл BXLServer.
  • Этот файл должен иметь имя bxlserver.xevents.xml.