在 SQL Server 机器学习服务中使用扩展事件监视 Python 和 R 脚本
适用于:SQL Server 2016 (13.x) 及更高版本 Azure SQL 托管实例
了解如何使用扩展事件来监视和疑难解答与 SQL Server 机器学习服务、SQL Server Launchpad 以及 Python 或 R 作业外部脚本有关的操作。
SQL Server 机器学习服务的扩展事件
若要查看与 SQL Server 机器学习服务相关的事件列表,请从 Azure Data Studio 或 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';
有关如何扩展事件的详细信息,请参阅扩展事件工具。
特定于机器学习服务的其他事件
其他扩展事件可用于与 SQL Server 机器学习服务相关并由其使用的组件,例如 SQL Server Launchpad 和 BXLServer,以及启动 Python 或 R 运行时的附属进程。 这些额外的扩展事件是从外部流程中触发的;因此,必须使用外部实用工具捕获它们。
有关如何操作的详细信息,请参阅从外部进程收集事件一节。
扩展事件表
事件 | 说明 | 说明 |
---|---|---|
connection_accept | 接受一个新连接时发生。 此事件用于记录所有连接尝试。 | |
failed_launching | 启动失败。 | 指示一个错误。 |
satellite_abort_connection | 中止连接记录 | |
satellite_abort_received | 通过卫星连接接收中止消息时触发。 | |
satellite_abort_sent | 通过卫星连接发送中止消息时触发。 | |
satellite_authentication_completion | 对基于 TCP 或命名管道的连接的身份验证完成时触发。 | |
satellite_authorization_completion | 对基于 TCP 或命名管道的连接的授权完成时触发。 | |
satellite_cleanup | 卫星调用清理时触发。 | 仅从外部进程触发。 请参阅有关从外部进程收集事件的说明。 |
satellite_data_chunk_sent | 卫星连接完成发送单个数据区块时触发。 | 发送区块时,此事件报告发送的行数、列数、所用的 SNI 数据包数目以及所用时间(以毫秒为单位)。 这些信息可帮助你了解传递不同类型的数据时花费了多长时间,以及使用了多少个数据包。 |
satellite_data_receive_completion | 通过卫星连接接收查询所需的所有数据时触发。 | 仅从外部进程触发。 请参阅有关从外部进程收集事件的说明。 |
satellite_data_send_completion | 通过卫星连接发送会话所需的所有数据时触发。 | |
satellite_data_send_start | 数据传输开始时触发。 | 数据传输开始时随即发送第一个数据区块。 |
satellite_error | 用于跟踪 sql 卫星错误 | |
satellite_invalid_sized_message | 消息大小无效 | |
satellite_message_coalesced | 用于跟踪在网络层合并的消息 | |
satellite_message_ring_buffer_record | 消息环形缓冲区记录 | |
satellite_message_summary | 有关消息传送的摘要信息 | |
satellite_message_version_mismatch | 消息的版本字段不匹配 | |
satellite_messaging | 用于跟踪消息传送事件(绑定、取消绑定等) | |
satellite_partial_message | 用于跟踪网络层的部分消息 | |
satellite_schema_received | 通过 SQL 接收和读取架构消息时触发。 | |
satellite_schema_sent | 通过卫星发送架构消息时触发。 | 仅从外部进程触发。 请参阅有关从外部进程收集事件的说明。 |
satellite_service_start_posted | 当服务启动消息发布到 launchpad 时触发。 | 这可以通知 launchpad 启动外部进程,并且该事件包含此新会话的 ID。 |
satellite_unexpected_message_received | 接收到意外消息时触发。 | 指示一个错误。 |
stack_trace | 请求进行进程的内存转储时发生。 | 指示一个错误。 |
trace_event | 用于跟踪目的 | 这些事件可以包含 SQL Server、Launchpad 和外部进程跟踪消息。 这包括从 R 到 stdout 和 stderr 的输出。 |
launchpad_launch_start | launchpad 开始启动卫星时触发。 | 仅从 Launchpad 触发。 请参阅有关从 launchpad.exe 收集事件的说明。 |
launchpad_resume_sent | Launchpad 已启动卫星并将恢复消息发送到 SQL Server 时触发。 | 仅从 Launchpad 触发。 请参阅有关从 launchpad.exe 收集事件的说明。 |
satellite_data_chunk_sent | 卫星连接完成发送单个数据区块时触发。 | 包含列数、行数、数据包数量,以及发送数据区块所用的时间等信息。 |
satellite_sessionId_mismatch | 消息的会话 ID 不匹配 |
从外部进程收集事件
SQL Server 机器学习服务启动在 SQL Server 进程外部运行的一些服务。 若要捕获与这些外部进程相关的事件,必须创建一个事件跟踪配置文件,并将该文件放在与进程的可执行文件相同的目录中。
重要
自 SQL Server 2019 起,隔离机制已发生更改。 因此,需要为存储事件跟踪配置文件的目录授予适当的权限。 有关如何设置这些权限的详细信息,请参阅 Windows 上 SQL Server 2019 中的“文件权限”部分:机器学习服务的隔离更改。
SQL Server Launchpad
若要捕获与 Launchpad 相关的事件,请将 .xml 文件放在 SQL Server 实例的 Binn 目录中 。 在默认安装中,此目录为:
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>
- 若要配置跟踪,请编辑会话名称 占位符、文件名的占位符 (
[SessionName].xel
) 和要捕获的事件的名称(如[XEvent Name 1]
、[XEvent Name 1]
)。 - 可能出现任意数量的“event package”标记,并且只要名称属性正确,就会收集此标记。
示例:捕获 Launchpad 事件
下面的示例显示了 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>
- 将 .xml 文件放在 SQL Server 实例的 Binn 目录中 。
- 此文件必须命名为
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
。