SQL Server Machine Learning Services の拡張イベントで Python および R のスクリプトを監視する

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Managed Instance

拡張イベントを使用して、SQL Server Machine Learning Services、SQL Server Launchpad、Python または R のジョブの外部スクリプトに関連する操作を監視およびトラブルシューティングする方法について説明します。

SQL Server Machine Learning Services の拡張イベント

SQL Server Machine Learning Services に関連するイベントの一覧を表示するには、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';

拡張イベントの使用法の詳細については、「拡張イベント ツール」を参照してください。

Machine Learning Services 固有のその他のイベント

その他の拡張イベントは、SQL Server Machine Learning Services に関連付けられていて、これが使用するコンポーネント (SQL Server Launchpad、BXLServer、Python または R のランタイムを起動するサテライト プロセスなど) で使用できます。 これらの追加の拡張イベントは、外部プロセスから起動します。そのため、外部ユーティリティを使用してキャプチャする必要があります。

これを実行する方法の詳細については、「Collecting Events from External Processes (外部プロセスからのイベントの収集)」を参照してください。

拡張イベントの表

Event 説明 Notes
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 サテライト接続が 1 つのデータ チャンクの送信を完了したときに発生します。 イベントにより、送信された行数と列数、使用された 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 サービス開始メッセージがスタートパッドに投稿されたときに発生します。 これにより、スタートパッドに外部プロセスを起動するように指示し、新しいセッションの ID が含まれます。
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 サテライト接続が 1 つのデータ チャンクの送信を完了したときに発生します。 列数、行数、パケット数、チャンクの送信にかかった時間に関する情報を格納します。
satellite_sessionId_mismatch メッセージのセッション ID が予期されたものではありません

外部プロセスからのイベントの収集

SQL Server Machine Learning Services は、SQL Server プロセスの外部で実行するいくつかのサービスを開始します。 これらの外部プロセスに関連するイベントをキャプチャするには、イベント トレース構成ファイルを作成し、プロセスの実行可能ファイルと同じディレクトリにこのファイルを配置する必要があります。

重要

SQL Server 2019 から、分離メカニズムが変更されています。 そのため、イベント トレース構成ファイルが格納されているディレクトリに適切なアクセス許可を付与する必要があります。 これらのアクセス許可の設定方法の詳細については、「Windows 上の SQL Server 2019:Windows 上の SQL Server 2019:Machine Learning Services」の「ファイルのアクセス許可」セクションを参照してください。

  • 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 のインストール ディレクトリに配置します。 既定のインストールでは、これは以下の場所です。

    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

構成ファイルは、"[name].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] など) を編集します。
  • 任意の数の event package タグが含まれることがあり、それらは name 属性が正しい限り収集されます。

例:スタートパッド イベントのキャプチャ

次の例に、スタートパッド サービスのイベント トレースの定義を示します。

<?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 である必要があります。

次のステップ