Überwachen von SQL Server Machine Learning Services mithilfe von dynamischen Verwaltungssichten
Gilt für: SQL Server 2016 (13.x) und höher 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 DMVs können beim Überwachen 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 Verwaltungssicht | type | 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 | Resource 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 | Resource 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. Mithilfe dieser Sicht können Sie den Zustand eines Zeitplanungsmoduls überwachen oder Endlostasks 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.
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:
Column | 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. |
ImpliedAuthenticationEnabled | 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.
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:
Column | 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. |
wait_time | 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. |
total_elapsed_time | 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 von dieser Anforderung ausgeführten Schreibvorgänge. |
language | 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.
Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten dynamischen Verwaltungssichten 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:
Column | BESCHREIBUNG |
---|---|
language | 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.
Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten dynamischen Verwaltungssichten 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:
Leistungsindikator | BESCHREIBUNG |
---|---|
Total Executions | Gibt die Anzahl der R-Prozesse an, die durch lokale oder Remoteaufrufe gestartet wurden. |
Parallel Executions | Gibt an, wie oft ein Skript die @parallel-Spezifikation enthielt und dass SQL Server einen parallelen Abfrageplan generieren und verwenden konnte. |
Streaming Executions | Gibt die Anzahl der Aufrufe des Streamingfeatures an. |
SQL CC Executions | Gibt die Anzahl der ausgeführten externen R-Skripts an, in denen der Aufruf remote instanziiert wurde und SQL Server als Computekontext verwendet wurde. |
Implied Auth. Anmeldungen | 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. |
Total Execution Time (ms) | Gibt an, wie viel Zeit zwischen Aufruf und Abschluss des Aufrufs vergangen ist. |
Execution Errors | 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.
Führen Sie die folgende Abfrage aus, um diese Ausgabe zu erhalten. Weitere Informationen zu den verwendeten DMVs 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:
Column | 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. |
external_pool_peak_memory_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.
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:
Column | Beschreibung |
---|---|
name | Gibt den Namen des externen Ressourcenpools oder der SQL Server-Instanz an. |
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 für die CPU, physische E/A und den Arbeitsspeicher festlegen, die eingehende Anwendungsanforderungen, einschließlich der Ausführung externer Skripts, innerhalb des Ressourcenpools nutzen können. Zeigen Sie die für SQL Server und externe Skripts verwendeten Ressourcenpools an.
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:
Column | BESCHREIBUNG |
---|---|
pool_name | Name des Ressourcenpools. Den Namen von SQL Server-Ressourcenpools wird SQL Server und den Namen von externen Ressourcenpools wird External Pool vorangestellt. |
total_cpu_usage_hours | Gibt die kumulative CPU-Auslastung in Millisekunden seit der letzten Zurücksetzung der Resource Governor-Statistiken an. |
read_io_completed_total | Die Gesamtanzahl der E/A-Lesevorgänge, die seit der letzten Zurücksetzung der Resource Governor-Statistiken abgeschlossen wurden. |
write_io_completed_total | Die Gesamtanzahl der E/A-Schreibvorgänge, die seit der letzten Zurücksetzung 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.
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:
Column | BESCHREIBUNG |
---|---|
Paket | Gibt den Namen des installierten Pakets an. |
Version | Gibt die Paketversion an. |
Depends (Abhängig) | 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.
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:
Column | BESCHREIBUNG |
---|---|
Paket | Gibt den Namen des installierten Pakets an. |
Version | Gibt die Paketversion an. |
Position | Gibt das Verzeichnis an, in dem Sie das Paket finden können. |