使用 SQL Server 機器學習服務中的擴充事件來監視 Python 與 R 指令碼

適用於:SQL Server 2016 (13.x) 和更新版本Azure SQL 受控執行個體

了解如何使用擴充事件來監視與 SQL Server 機器學習服務、SQL Server Launchpad 和 Python 或 R 作業外部指令碼相關的操作及針對其進行疑難排解。

SQL Server 機器學習服務的擴充事件

若要檢視與 SQL Server 機器學習 Services 相關的事件清單,請在 SQL Server Management Studio (SSMS)、Visual Studio Code 的 MSSQL 延伸模組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 執行階段的附屬處理序) 使用。 這些額外的延伸事件是由外部處理序觸發;因此,必須使用外部公用程式來擷取。

如需有關如何執行此動作的詳細資訊,請參閱從外部處理序收集事件一節。

擴充事件表

事件 描述 附註
接受連線 當接受新的連線時發生。 此事件是用來記錄所有的連線嘗試。
啟動失敗 啟動失敗。 表示發生錯誤。
中止衛星連線 中止連接記錄
已收到衛星中止訊號 當透過衛星連線收到中止訊息時觸發。
衛星中止訊息已送出 當透過衛星連線傳送中止訊息時觸發。
衛星驗證完成 完成透過 TCP 或具名管道連線的驗證時引發。
衛星_授權_完成 透過 TCP 或具名管道進行的連線完成授權時觸發。
衛星清理 當衛星呼叫清理程序時觸發。 僅會由外部處理序觸發。 請參閱從外部程序收集事件的說明。
satellite_data_chunk_sent 當衛星連線完成傳送一個資料區塊時觸發。 事件會回報已傳送的資料列數、資料行數、已使用的 SNI 封包數,以及傳送區塊時所經過的時間 (以毫秒為單位)。 此資訊可協助您了解傳送不同類型的資料花費多少時間,以及使用多少封包。
衛星資料接收完成 當透過衛星連線收到查詢所需的所有資料時,便會觸發。 僅由外部處理序觸發。 請參閱從外部處理序收集事件的說明。
衛星資料傳送完成 當工作階段所需的所有資料都透過衛星連線傳送時觸發。
開始傳送衛星資料 當資料傳輸開始時觸發。 資料傳輸會在傳送第一個資料區塊之前開始。
衛星錯誤 用於追查 SQL Satellite 錯誤
衛星訊息大小無效 訊息大小無效
衛星訊息合併 用於追蹤網路層中的訊息合併
衛星訊息環形緩衝區記錄 訊息環形緩衝區記錄
衛星訊息摘要 訊息傳遞的相關摘要資訊
衛星訊息版本不相符 訊息的版本欄位不相符
衛星_傳訊 用來追蹤訊息事件 (繫結、解除繫結等)
衛星部分訊息 用來追蹤網路層的部分訊息
satellite_schema_received 當 SQL 收到並讀取結構描述訊息時觸發。
satellite_schema_sent 當衛星傳送結構描述訊息時觸發。 僅由外部處理序觸發。 請參閱從外部處理序收集事件的說明。
已發布衛星服務啟動通知 當服務啟動訊息發布到 Launchpad 時觸發。 這會告知 Launchpad 啟動外部處理序,並包含新工作階段的識別碼。
已收到非預期的衛星訊息 收到未預期的訊息時觸發。 表示發生錯誤。
stack_trace 在要求處理序的記憶體傾印時發生。 表示發生錯誤。
trace_event 用於追蹤用途 這些事件可以包含 SQL Server、Launchpad 和外部程序追蹤訊息。 包含從 R 輸出至 stdout 和 stderr。
launchpad_launch_start 當 Launchpad 開始發射衛星時觸發。 只能從啟動控制板引發。 請參閱從 launchpad.exe 收集事件的操作說明。
launchpad_resume_sent 當 Launchpad 啟動衛星並將恢復訊息傳送至 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 相關的事件,請將 .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 安裝目錄中。 在預設的安裝中,這會是:

    答:C:\Program Files\Microsoft SQL Server\MSSQL_version_number.MSSQLSERVER\R_SERVICES\library\RevoScaleR\rxLibs\x64

    PythonC:\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