Überwachen von Python- und R-Skripts mit erweiterten Ereignissen in SQL Server Machine Learning Services

Gilt für: SQL Server 2016 (13.x) und höhere Versionen von Azure SQL Managed Instance

Erfahren Sie, wie Sie erweiterte Ereignisse verwenden, um Vorgänge im Zusammenhang mit SQL Server Machine Learning Services, dem SQL Server-Launchpad und externen Skripts für Python- oder R-Aufträge zu überwachen und Probleme zu beheben.

Erweiterte Ereignisse für SQL Server Machine Learning Services

Um eine Liste der Ereignisse im Zusammenhang mit SQL Server Machine Learning Services anzuzeigen, führen Sie die folgende Abfrage in SQL Server Management Studio (SSMS), die MSSQL-Erweiterung für Visual Studio Code, sqlcmd oder Ihr bevorzugtes T-SQL-Abfragetool aus.

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

Weitere Informationen zu erweiterten Ereignissen finden Sie unter Tools für erweiterte Ereignisse.

Zusätzliche für Machine Learning Services spezifische Ereignisse

Zusätzliche erweiterte Ereignisse sind für Komponenten verfügbar, die mit SQL Server Machine Learning Services verknüpft sind und von dieser Engine verwendet werden, z. B. das SQL Server-Launchpad und BXLServer sowie der Satellitenprozess, der die Python- oder R-Runtime startet. Diese zusätzlichen erweiterten Ereignisse werden von externen Prozessen ausgelöst und müssen daher mithilfe eines externen Hilfsprogramms erfasst werden.

Weitere Informationen zum Erfassen dieser Ereignisse finden Sie im Abschnitt Sammeln von Ereignissen aus externen Prozessen.

Tabelle erweiterter Ereignisse

Ereignis BESCHREIBUNG Notizen
connection_accept Tritt auf, wenn eine neue Verbindung akzeptiert wird. Dieses Ereignis dient dazu, alle Verbindungsversuche zu protokollieren.
Starten fehlgeschlagen Fehler beim Starten. Gibt einen Fehler an.
satellit_verbindung_abbrechen Eintrag über einen Verbindungsabbruch
satellite_abort_received Wird ausgelöst, wenn eine Abbruchnachricht über eine Satellitenverbindung empfangen wird.
satellite_abort_sent Wird ausgelöst, wenn eine Abbruchnachricht über eine Satellitenverbindung gesendet wird.
satellite_authentication_completion Wird ausgelöst, wenn die Authentifizierung für eine Verbindung über TCP oder Named Pipe abgeschlossen wurde.
Abschluss der Satellitenautorisierung Wird ausgelöst, wenn der Autorisierungsvorgang für eine Verbindung über TCP oder eine benannte Pipe abgeschlossen ist.
Satellitenbereinigung Wird ausgelöst, wenn ein Satellit Cleanup aufruft. Wird nur durch einen externen Prozess ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus externen Prozessen.
satellitendatenblock_gesendet Wird ausgelöst, wenn die Satellitenverbindung das Senden eines einzelnen Datensegments abschließt. Das Ereignis gibt die Anzahl der gesendeten Zeilen, Spalten, der verwendeten SNI-Pakete und die beim Senden des Blocks verstrichene Zeit in Millisekunden an. Anhand dieser Informationen können Sie nachvollziehen, wie viel Zeit für das Übergeben von verschiedene Datentypen benötigt wird und wie viele Pakete verwendet werden.
Empfang von Satellitendaten abgeschlossen Wird ausgelöst, wenn alle erforderlichen Abfragedaten über die Satellitenverbindung empfangen wurden. Nur durch einen externen Prozess ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus externen Prozessen.
satellite_data_send_completion Wird ausgelöst, wenn alle erforderlichen Abfragedaten über die Satellitenverbindung gesendet wurden.
Senden von Satellitendaten starten Wird ausgelöst, wenn die Datenübertragung gestartet wird. Die Datenübertragung startet unmittelbar bevor der erste Datenblock gesendet wird.
satellite_error Wird verwendet, um einen SQL-Satellitenfehler nachzuverfolgen
satellite_invalid_sized_message Die Größe der Nachricht ist ungültig.
satellit_nachricht_zusammengeführt Wird verwendet, um das Zusammenfügen von Nachrichten auf Netzwerkebene nachzuverfolgen
satellite_message_ring_buffer_record Nachrichten-Ringpuffer-Eintrag
satellite_message_summary zusammenfassende Informationen zur Nachrichtenübermittlung
satellite_message_version_mismatch Versionsfeld der Nachricht stimmt nicht überein
Satellitenkommunikation Wird verwendet, um ein Nachrichtenereignis (Binden, Bindung aufheben usw.) nachzuverfolgen.
Satelliten-Teilnachricht Wird verwendet, um eine Teilnachricht auf Netzwerkebene nachzuverfolgen.
satellite_schema_received Wird ausgelöst, wenn die Schemanachricht empfangen und von SQL gelesen wird.
satellite_schema_sent Wird ausgelöst, wenn der Satellit eine Schema-Nachricht sendet. Wird nur durch einen externen Prozess ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus externen Prozessen.
Start des Satellitendienstes veröffentlicht Wird ausgelöst, wenn die Dienststartmeldung an das Launchpad gesendet wird. Dies erteilt Launchpad den Auftrag, den externen Prozess zu starten. Außerdem enthält das Ereignis eine ID für die neue Sitzung.
Unerwartete Nachricht empfangen Wird ausgelöst, wenn eine unerwartete Nachricht empfangen wird. Gibt einen Fehler an.
stack_trace Tritt auf, wenn ein Speicherabbild des Prozesses angefordert wird. Gibt einen Fehler an.
trace_event Wird für Zwecke der Nachverfolgung verwendet Diese Ereignisse können Ablaufverfolgungsmeldungen von SQL Server, Launchpad und externen Prozessen enthalten. Dies schließt die Ausgabe von R an stdout und stderr ein.
launchpad_launch_start Wird ausgelöst, wenn das Launchpad mit dem Start eines Satelliten beginnt. Wird nur über Launchpad ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus launchpad.exe.
launchpad_resume_sent Wird ausgelöst, wenn Launchpad den Satelliten gestartet und eine Fortsetzungsmeldung an SQL Server gesendet hat. Wird nur über Launchpad ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus launchpad.exe.
satellite_data_chunk_sent Wird ausgelöst, wenn die Satellitenverbindung das Senden eines einzelnen Datensegments abschließt. Enthält Informationen über die Anzahl der Spalten, Zeilen und Pakete sowie über die zum Versenden des Segments benötigten Zeit.
satellite_sessionId_mismatch Die Sitzungs-ID der Nachricht ist unerwartet

Sammeln von Ereignissen aus externen Prozessen

SQL Server Machine Learning Services startet einige Dienste, die außerhalb des SQL Server-Prozesses ausgeführt werden. Sie können Ereignisse erfassen, die im Zusammenhang mit diesen externen Prozessen auftreten, indem Sie eine Konfigurationsdatei zur Ereignisnachverfolgung erstellen. Diese Datei müssen Sie im gleichen Verzeichnis wie die ausführbare Datei für den Prozess ablegen.

Wichtig

In SQL Server 2019 wurde der Isolationsmechanismus geändert. Daher müssen Sie dem Verzeichnis, in dem die Konfigurationsdatei für die Ereignisablaufverfolgung gespeichert ist, geeignete Berechtigungen erteilen. Informationen zum Festlegen dieser Berechtigungen finden Sie im Abschnitt zu Dateiberechtigungen unter „SQL Server 2019 unter Windows: Isolationsänderungen für Machine Learning Services“.

  • SQL Server-Launchpad

    Legen Sie die .xml-Datei im Binn-Verzeichnis für die SQL Server-Instanz ab, um Ereignisse zu erfassen, die im Zusammenhang mit dem Launchpad auftreten. In einer Standardinstallation wäre dies:

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

  • BXLServer ist der Satellitenprozess, der die Erweiterbarkeit von SQL auf externe Skriptsprachen wie R oder Python unterstützt. Für jede externe Sprachinstanz wird eine separate Instanz von BXLServer gestartet.

    Sie können Ereignisse erfassen, die im Zusammenhang mit BXLServer auftreten, indem Sie die .xml-Datei im Installationsverzeichnis von R oder Python ablegen. In einer Standardinstallation wäre dies:

    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.

Der Name der Konfigurationsdatei muss identisch mit dem der ausführbaren Datei sein und dem Format „[Name].xevents.xml“ entsprechen. Mit anderen Worten: Die Dateien müssen folgendermaßen benannt werden:

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

Die Konfigurationsdatei weist das folgende Format auf:

<?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>  
  • Bearbeiten Sie zum Konfigurieren der Verfolgung den Platzhalter für den Namen der Sitzung (session name), den Platzhalter für den Dateinamen ([SessionName].xel) und die Namen der Ereignisse, die Sie erfassen möchten (z. B. [XEvent Name 1] oder [XEvent Name 1]).
  • Eine beliebige Anzahl von Tags für Ereignispakete kann angezeigt werden und wird gesammelt, solange das Namensattribut korrekt ist.

Beispiel: Erfassen von Launchpad-Ereignissen

Das folgende Beispiel zeigt die Definition einer Ereignisnachverfolgung für den Launchpad-Dienst:

<?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>  
  • Legen Sie die .xml-Datei im Binn-Verzeichnis für die SQL Server-Instanz ab.
  • Diese Datei muss den Namen Launchpad.xevents.xml haben.

Beispiel: Erfassen von BXLServer-Ereignissen

Das folgende Beispiel zeigt die Definition einer Ereignisablaufverfolgung für die ausführbare Datei 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>  
  • Legen Sie die .xml-Datei im selben Verzeichnis ab wie die ausführbare BXLServer-Datei.
  • Diese Datei muss den Namen bxlserver.xevents.xml haben.