使用 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 在服務啟動訊息張貼到啟動控制板時引發。 這會通知啟動控制板啟動外部處理序,且其中包含新工作階段的識別碼。
satellite_unexpected_message_received 收到非預期的訊息時引發。 表示發生錯誤。
stack_trace 在要求處理序的記憶體傾印時發生。 表示發生錯誤。
trace_event 用來進行追蹤 這些事件可以包含 SQL Server、啟動控制板和外部處理序追蹤訊息。 包含從 R 輸出至 stdout 和 stderr。
launchpad_launch_start 啟動板開始啟動附屬處理序時引發。 只能從啟動控制板引發。 檢視從 launchpad.exe 收集事件的指示。
launchpad_resume_sent 啟動控制板啟動附屬處理序並將繼續訊息傳送至 SQL Server 時引發。 只能從啟動控制板引發。 檢視從 launchpad.exe 收集事件的指示。
satellite_data_chunk_sent 附屬連線完成傳送單一資料區塊時引發。 包含有關資料行數目、資料列數目、封包數目及傳送區塊所經過之時間的資訊。
satellite_sessionId_mismatch 非預期的訊息工作階段識別碼

從外部處理序收集事件

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>  
  • 若要設定追蹤,請編輯 session name 預留位置、檔案名稱的預留位置 ([SessionName].xel),以及您想要擷取之事件的名稱 (例如 [XEvent Name 1][XEvent Name 1])。
  • 可出現任意數目的 標籤,而且只要 name 屬性正確就會進行收集。

範例:擷取 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

後續步驟