Ü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öher 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
Führen Sie die folgende Abfrage über Azure Data Studio oder SQL Server Management Studio aus, um eine Liste der Ereignisse abzurufen, die im Zusammenhang mit SQL Server Machine Learning Services stehen.
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. | |
failed_launching | Fehler beim Starten. | Gibt einen Fehler an. |
satellite_abort_connection | 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. | |
satellite_authorization_completion | Wird ausgelöst, wenn die Autorisierung für eine Verbindung über TCP oder Named Pipe abgeschlossen wurde. | |
satellite_cleanup | Wird ausgelöst, wenn ein Satellit Cleanup aufruft. | Nur aus externem Prozess ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus externen Prozessen. |
satellite_data_chunk_sent | 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. |
satellite_data_receive_completion | Wird ausgelöst, wenn alle erforderlichen Abfragedaten über die Satellitenverbindung empfangen wurden. | Nur aus externem 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. | |
satellite_data_send_start | Wird ausgelöst, wenn die Datenübertragung gestartet wird. | Wird ausgelöst, wenn die Datenübertragung beginnt (unmittelbar bevor der erste Datenblock gesendet wird). |
satellite_error | Wird verwendet, um einen SQL-Satellitenfehler nachzuverfolgen | |
satellite_invalid_sized_message | Länge dieser Nachricht ist ungültig. | |
satellite_message_coalesced | Wird verwendet, um das Zusammenfügen von Nachrichten auf Netzwerkebene nachzuverfolgen | |
satellite_message_ring_buffer_record | Eintrag über Nachrichtenringpuffer | |
satellite_message_summary | zusammenfassende Informationen zur Nachrichtenübermittlung | |
satellite_message_version_mismatch | Versionsfeld der Nachricht stimmt nicht überein | |
satellite_messaging | Wird verwendet, um ein Nachrichtenereignis (Binden, Bindung aufheben usw.) nachzuverfolgen. | |
satellite_partial_message | 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 Schemanachricht sendet. | Nur aus externem Prozess ausgelöst. Lesen Sie die Anleitung für das Sammeln von Ereignissen aus externen Prozessen. |
satellite_service_start_posted | Wird ausgelöst, wenn die Startnachricht des Diensts an 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. |
satellite_unexpected_message_received | 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 zu Protokollierungszwecken verwendet | Diese Ereignisse können Ablaufverfolgungsmeldungen von SQL Server, Launchpad und externen Prozessen enthalten. Dies schließt die Ausgabe an „stdout“ und „stderr“ aus R ein. |
launchpad_launch_start | Wird ausgelöst, wenn Launchpad einen Satelliten startet. | Wird nur aus 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 aus 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 | Sitzungs-ID der Nachricht wird nicht erwartet |
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 von 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.