Überwachen von SQL Server Machine Learning Services mithilfe dynamischer Verwaltungssichten

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

Verwenden Sie dynamische Verwaltungssichten (DMVs), um die externe Skriptausführung (Python und R) und Ressourcennutzung zu überwachen, Probleme zu diagnostizieren und die Leistung in SQL Server Machine Learning Services zu optimieren.

In diesem Artikel finden Sie DMVs, die spezifisch für SQL Server Machine Learning Services vorgesehen sind. Außerdem finden Sie Beispielabfragen, die Folgendes veranschaulichen:

  • Einstellungs- und Konfigurationsoptionen für maschinelles Lernen
  • Aktive Sitzungen mit Ausführung externer Python- oder R-Skripts
  • Ausführungsstatistiken für die externe Runtime von Python und R
  • Leistungsindikatoren für externe Skripts
  • Arbeitsspeicherauslastung für das Betriebssystem, SQL Server und externe Ressourcenpools
  • Arbeitsspeicherkonfiguration für SQL Server und externe Ressourcenpools
  • Resource Governor-Ressourcenpools, einschließlich externer Ressourcenpools
  • Installierte Pakete für Python und R

Weitere allgemeine Informationen über DMVs finden Sie unter Dynamische Systemverwaltungssichten.

Tipp

Sie können auch die benutzerdefinierten Berichte zum Überwachen von SQL Server Machine Learning Services verwenden. Weitere Informationen finden Sie unter Überwachen von Machine Learning Services mithilfe benutzerdefinierter Berichte in Management Studio.

Dynamische Verwaltungssichten

Die folgenden dynamischen Verwaltungssichten können bei der Überwachung von Machine Learning-Workloads in SQL Server verwendet werden. Zum Abfragen der DMVs benötigen Sie die VIEW SERVER STATE-Berechtigung für die Instanz.

Dynamische Verwaltungsansicht Typ BESCHREIBUNG
sys.dm_external_script_requests Ausführung Gibt eine Zeile für jedes aktive Workerkonto zurück, das ein externes Skript ausführt.
sys.dm_external_script_execution_stats Ausführung Gibt eine Zeile für jeden Typ von externer Skriptanforderung zurück.
sys.dm_os_performance_counters Ausführung Gibt eine Zeile pro Leistungsindikator zurück, der vom Server verwaltet wird. Wenn Sie die Suchbedingung WHERE object_name LIKE '%External Scripts%' verwenden, können Sie diese Information verwenden, um in Erfahrung zu bringen, wie viele Skripts ausgeführt wurden, welche Skripts mit welchem Authentifizierungsmodus ausgeführt wurden oder wie viele R- oder Python-Aufrufe insgesamt für die Instanz ausgegeben wurden.
sys.dm_resource_governor_external_resource_pools Ressourcen-Governor Gibt Informationen zum aktuellen Status des externen Ressourcenpools im Resource Governor, zur aktuellen Konfiguration von Ressourcenpools und Ressourcenpoolstatistiken zurück.
sys.dm_resource_governor_external_resource_pool_affinity Ressourcen-Governor Gibt CPU-Affinitätsinformationen zur aktuellen externen Ressourcenpoolkonfiguration im Resource Governor zurück. Gibt eine Zeile pro Zeitplanungsmodul in SQL Server zurück, wobei jedes Zeitplanungsmodul einem einzelnen Prozessor zugeordnet ist. Verwenden Sie diese Ansicht, um den Status eines Schedulers zu überwachen oder außer Kontrolle geratene Aufgaben zu identifizieren.

Informationen zum Überwachen von SQL Server-Instanzen finden Sie unter Katalogsichten und Dynamische Verwaltungssichten in Verbindung mit dem Resource Governor.

Einstellungen und Konfiguration

Zeigen Sie die Installationseinstellungen und Konfigurationsoptionen von Machine Learning Services an.

Ausgabe der Abfrage für Einstellungen und Konfiguration

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu verwendeten Sichten und Funktionen finden Sie unter sys.dm_server_registry, sys.configurations und SERVERPROPERTY.

SELECT CAST(SERVERPROPERTY('IsAdvancedAnalyticsInstalled') AS INT) AS IsMLServicesInstalled
    , CAST(value_in_use AS INT) AS ExternalScriptsEnabled
    , COALESCE(SIGN(SUSER_ID(CONCAT (
                    CAST(SERVERPROPERTY('MachineName') AS NVARCHAR(128))
                    , '\SQLRUserGroup'
                    , CAST(serverproperty('InstanceName') AS NVARCHAR(128))
                    ))), 0) AS ImpliedAuthenticationEnabled
    , COALESCE((
            SELECT CAST(r.value_data AS INT)
            FROM sys.dm_server_registry AS r
            WHERE r.registry_key LIKE 'HKLM\Software\Microsoft\Microsoft SQL Server\%\SuperSocketNetLib\Tcp'
            AND r.value_name = 'Enabled'
            ), - 1) AS IsTcpEnabled
FROM sys.configurations
WHERE name = 'external scripts enabled';

Die Abfrage gibt die folgenden Spalten zurück:

Spalte BESCHREIBUNG
IsMLServicesInstalled Gibt „1“ zurück, wenn SQL Server Machine Learning Services für die Instanz installiert ist. Andernfalls wird „0“ (null) zurückgegeben.
ExternalScriptsEnabled Gibt „1“ zurück, wenn externe Skripts für die Instanz aktiviert sind. Andernfalls wird „0“ (null) zurückgegeben.
Implizite Authentifizierung aktiviert Gibt „1“ zurück, wenn die implizite Authentifizierung aktiviert ist. Andernfalls wird „0“ (null) zurückgegeben. Die Konfiguration die für implizite Authentifizierung wird überprüft, indem verifiziert wird, ob eine Anmeldung für SQLRUserGroup existiert.
IsTcpEnabled Gibt „1“ zurück, wenn das TCP/IP-Protokoll für die Instanz aktiviert ist. Andernfalls wird „0“ (null) zurückgegeben. Weitere Informationen finden Sie unter Standardnetzwerkkonfiguration von SQL Server.

Aktive Sitzungen

Zeigen Sie die aktiven Sitzungen an, die externe Skripts ausführen.

Ausgabe der Abfrage für aktive Einstellungen

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten DMVs finden Sie unter sys.dm_exec_requests, sys.dm_external_script_requests und sys.dm_exec_sessions.

SELECT r.session_id, r.blocking_session_id, r.status, DB_NAME(s.database_id) AS database_name
    , s.login_name, r.wait_time, r.wait_type, r.last_wait_type, r.total_elapsed_time, r.cpu_time
    , r.reads, r.logical_reads, r.writes, er.language, er.degree_of_parallelism, er.external_user_name
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_external_script_requests AS er
ON r.external_script_request_id = er.external_script_request_id
INNER JOIN sys.dm_exec_sessions AS s
ON s.session_id = r.session_id;

Die Abfrage gibt die folgenden Spalten zurück:

Spalte BESCHREIBUNG
session_id Identifiziert die einer aktiven primären Verbindung zugeordnete Sitzung.
blocking_session_id ID der Sitzung, die die Anforderung blockiert. Wenn diese Spalte den Wert NULL aufweist, wird die Anforderung nicht blockiert, oder die Sitzungsinformationen der blockierenden Sitzung sind nicht verfügbar (bzw. können nicht identifiziert werden).
Status Status der Anforderung.
database_name Name der aktuellen Datenbank für jede Sitzung.
login_name SQL Server-Anmeldename, unter dem die Sitzung gegenwärtig ausgeführt wird.
Wartezeit Wenn die Anforderung zurzeit blockiert wird, gibt diese Spalte die Dauer des aktuellen Wartevorgangs in Millisekunden an. Lässt keine NULL-Werte zu.
wait_type Wenn die Anforderung zurzeit blockiert wird, gibt diese Spalte den Wartetyp zurück. Informationen zu Wartetypen finden Sie unter sys.dm_os_wait_stats.
last_wait_type Wenn diese Anforderung zuvor bereits blockiert war, gibt diese Spalte den Typ des letzten Wartevorgangs zurück.
gesamt_verstrichene_zeit Gesamtzeit seit dem Eintreffen der Anforderung (in Millisekunden).
cpu_time Von der Anforderung beanspruchte CPU-Zeit (in Millisekunden).
Lesevorgänge Anzahl der von dieser Anforderung ausgeführten Lesevorgänge.
logical_reads Anzahl der von dieser Anforderung ausgeführten logischen Lesevorgänge.
Schreibvorgänge Anzahl der durch diese Anfrage ausgeführten Schreibvorgänge.
Sprache Schlüsselwort, das einer unterstützten Skriptsprache entspricht.
degree_of_parallelism Zahl, die die Anzahl von parallelen Prozessen angibt, die erstellt wurden. Dieser Wert kann sich von der Anzahl von parallelen Prozessen unterscheiden, die angefordert wurden.
external_user_name Das Windows-Workerkonto, unter dem das Skript ausgeführt wurde.

Ausführungsstatistiken

Zeigen Sie die Ausführungsstatistiken für die externe Runtime von Python und R an. Derzeit sind nur Statistiken der Paketfunktionen RevoScaleR, revoscalepy und MicrosoftML verfügbar.

Ausgabe der Abfrage für Ausführungsstatistiken

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zur verwendeten dynamischen Verwaltungssicht finden Sie unter sys.dm_external_script_execution_stats. Die Abfrage gibt nur Funktionen zurück, die mehr als einmal ausgeführt wurden.

SELECT language, counter_name, counter_value
FROM sys.dm_external_script_execution_stats
WHERE counter_value > 0
ORDER BY language, counter_name;

Die Abfrage gibt die folgenden Spalten zurück:

Spalte BESCHREIBUNG
Sprache Name der registrierten externen Skriptsprache.
counter_name Name einer registrierten externen Skriptfunktion.
counter_value Gesamtanzahl der Instanzen, die von der registrierten externen Skriptfunktion auf dem Server aufgerufen wurden. Dieser Wert ist kumulativ und beginnt mit dem Zeitpunkt, zu dem das Feature auf der Instanz installiert wurde. Der Wert kann nicht zurückgesetzt werden.

Leistungsindikatoren

Zeigen Sie die Leistungsindikatoren für die Ausführung externer Skripts an.

Ausgabe der Leistungsindikatorenabfrage

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu der verwendeten dynamischen Verwaltungssicht finden Sie unter sys.dm_os_performance_counters.

SELECT counter_name, cntr_value
FROM sys.dm_os_performance_counters 
WHERE object_name LIKE '%External Scripts%'

sys.dm_os_performance_counters gibt die folgenden Leistungsindikatoren für externe Skripts aus:

Zähler BESCHREIBUNG
Gesamtausführungen Anzahl der externen Prozesse, die durch lokale oder Remote-Aufrufe gestartet wurden.
Parallele Ausführungen Gibt an, wie oft ein Skript die @parallel-Spezifikation enthielt und dass SQL Server einen parallelen Abfrageplan generieren und verwenden konnte.
Streamingausführungen Gibt die Anzahl der Aufrufe des Streamingfeatures an.
SQL CC-Ausführungen Gibt die Anzahl der ausgeführten externen R-Skripts an, in denen der Aufruf remote instanziiert wurde und SQL Server als Computekontext verwendet wurde.
Implizite Authentifizierungsanmeldungen Gibt an, wie oft ein ODBC-Loopback-Aufruf mit implizierter Authentifizierung abgeschlossen wurde, d. h. dass SQL Server den Aufruf im Auftrag des Benutzers ausgeführt und die Skriptanforderung gesendet hat.
Gesamtausführungszeit (ms) Gibt an, wie viel Zeit zwischen Aufruf und Abschluss des Aufrufs vergangen ist.
Ausführungsfehler Gibt an, wie oft Skripts Fehler gemeldet haben. Diese Zahl umfasst keine R- oder Python-Fehler.

Speicherauslastung

Zeigen Sie Informationen zum vom Betriebssystem, von SQL Server und von den externen Pools verwendeten Arbeitsspeicher an.

Ausgabe der Abfrage für Speicherauslastung

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten dynamischen Verwaltungssichten finden Sie unter sys.dm_resource_governor_external_resource_pools und sys.dm_os_sys_info.

SELECT physical_memory_kb, committed_kb
    , (SELECT SUM(peak_memory_kb)
        FROM sys.dm_resource_governor_external_resource_pools AS ep
        ) AS external_pool_peak_memory_kb
FROM sys.dm_os_sys_info;

Die Abfrage gibt die folgenden Spalten zurück:

Spalte BESCHREIBUNG
physical_memory_kb Gibt die Gesamtmenge des physischen Speichers auf dem Computer an.
committed_kb Gibt den im Arbeitsspeicher-Manager zugesicherten Speicher in Kilobyte (KB) an. Reservierter Arbeitsspeicher im Speicher-Manager ist nicht eingeschlossen.
extern_pool_speicherhöchstwert_kb Gibt die Summe des maximalen verwendeten Arbeitsspeichers für alle externen Ressourcenpools in Kilobyte an.

Konfiguration des Arbeitsspeichers

Zeigen Sie Informationen zur maximalen Arbeitsspeicherkonfiguration von SQL Server und externen Ressourcenpools in Prozent an. Wenn SQL Server mit dem Standardwert max server memory (MB) ausgeführt wird, wird dieser als 100 % des Betriebssystemspeichers betrachtet.

Ausgabe der Abfrage für Speicherkonfiguration

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten Sichten finden Sie unter sys.configurations und sys.dm_resource_governor_external_resource_pools.

SELECT 'SQL Server' AS name
    , CASE CAST(c.value AS BIGINT)
        WHEN 2147483647 THEN 100
        ELSE (SELECT CAST(c.value AS BIGINT) / (physical_memory_kb / 1024.0) * 100 FROM sys.dm_os_sys_info)
        END AS max_memory_percent
FROM sys.configurations AS c
WHERE c.name LIKE 'max server memory (MB)'
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name, ep.max_memory_percent
FROM sys.dm_resource_governor_external_resource_pools AS ep;

Die Abfrage gibt die folgenden Spalten zurück:

Spalte BESCHREIBUNG
Name Name des externen Ressourcenpools oder von SQL Server.
max_memory_percent Gibt den maximalen Arbeitsspeicher an, den die SQL Server-Instanz oder der externe Ressourcenpool beanspruchen kann.

Ressourcenpools

Im SQL Server-Resource Governor stellt ein Ressourcenpool eine Teilmenge der physischen Ressourcen einer Instanz dar. Sie können Grenzwerte dafür festlegen, wie viel CPU, physische E/A und Arbeitsspeicher eingehende Anwendungsanforderungen, einschließlich der Ausführung externer Skripts, innerhalb des Ressourcenpools verwenden dürfen. Zeigen Sie die für SQL Server und externe Skripts verwendeten Ressourcenpools an.

Ausgabe der Abfrage für Ressourcenpools

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten dynamischen Verwaltungssichten finden Sie unter sys.dm_resource_governor_resource_pools und sys.dm_resource_governor_external_resource_pools.

SELECT CONCAT ('SQL Server - ', p.name) AS pool_name
    , p.total_cpu_usage_ms, p.read_io_completed_total, p.write_io_completed_total
FROM sys.dm_resource_governor_resource_pools AS p
UNION ALL
SELECT CONCAT ('External Pool - ', ep.name) AS pool_name
    , ep.total_cpu_user_ms, ep.read_io_count, ep.write_io_count
FROM sys.dm_resource_governor_external_resource_pools AS ep;

Die Abfrage gibt die folgenden Spalten zurück:

Spalte BESCHREIBUNG
pool_name Name des Ressourcenpools. SQL Server-Ressourcenpools wird das Präfix SQL Server vorangestellt, externen Ressourcenpools das Präfix External Pool.
total_cpu_usage_hours Gibt die kumulative CPU-Auslastung in Millisekunden seit dem Zurücksetzen der Resource Governor-Statistiken an.
read_io_completed_total Die Gesamtzahl der Lese-E/A-Vorgänge, die seit dem Zurücksetzen der Resource Governor-Statistiken ausgeführt wurden.
schreiben_io_abgeschlossen_gesamt Die Gesamtzahl der E/A-Schreibvorgänge, die seit dem Zurücksetzen der Resource Governor-Statistiken abgeschlossen wurden.

Installierte Pakete

Sie können die in SQL Server Machine Learning Services installierten R- und Python-Pakete anzeigen, indem Sie ein R- oder Python-Skript ausführen, das diese ausgibt.

Installierte R-Pakete

Zeigen Sie die in SQL Server Machine Learning Services installierten R-Pakete an.

Ausgabe der Abfrage für installierte R-Pakete

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Die Abfrage nutzt ein R-Skript, um die auf der SQL Server-Instanz installierten R-Pakete zu ermitteln.

EXECUTE sp_execute_external_script @language = N'R'
, @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License", "LibPath")]);'
WITH result sets((Package NVARCHAR(255), Version NVARCHAR(100), Depends NVARCHAR(4000)
    , License NVARCHAR(1000), LibPath NVARCHAR(2000)));

Die folgenden Spalten werden zurückgegeben:

Spalte BESCHREIBUNG
Paket Gibt den Namen des installierten Pakets an.
Version Gibt die Paketversion an.
Kommt darauf an Führt die Pakete auf, von denen das installierte Paket abhängt.
Lizenz Gibt die Lizenz für das installierte Paket an.
LibPath Gibt das Verzeichnis an, in dem Sie das Paket finden können.

Installierte Python-Pakete

Zeigen Sie die in SQL Server Machine Learning Services installierten Python-Pakete an.

Ausgabe der Abfrage für installierte Python-Pakete

Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Die Abfrage nutzt ein Python-Skript, um die auf der SQL Server-Instanz installierten Python-Pakete zu ermitteln.

EXECUTE sp_execute_external_script @language = N'Python'
, @script = N'
import pkg_resources
import pandas
OutputDataSet = pandas.DataFrame(sorted([(i.key, i.version, i.location) for i in pkg_resources.working_set]))'
WITH result sets((Package NVARCHAR(128), Version NVARCHAR(128), Location NVARCHAR(1000)));

Die folgenden Spalten werden zurückgegeben:

Spalte BESCHREIBUNG
Paket Gibt den Namen des installierten Pakets an.
Version Gibt die Paketversion an.
Standort Gibt das Verzeichnis an, in dem Sie das Paket finden können.