Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Managed Instance
Dieser Artikel enthält exemplarische Vorgehensweisen, die Sie beim Konfigurieren der Ressourcenverwaltung unterstützen und überprüfen können, ob Ihre Konfiguration wie erwartet funktioniert. Es beginnt mit einem einfachen Beispiel und führt zu den komplexeren.
Der Artikel enthält auch Beispiele für Abfragen zur Überwachung des Resource Governor und eine Liste von bewährten Praktiken für den Resource Governor.
In allen Beispielen wird davon ausgegangen, dass die Ressourcenkontrolle anfänglich deaktiviert ist und Standardeinstellungen verwendet und dass keine benutzerdefinierten Ressourcenpools, Workloadgruppen und Klassifizierungsfunktionen vorhanden sind.
Hinweis
Um die Konfiguration der Ressourcenkontrolle in der verwalteten Azure SQL-Instanz zu ändern, müssen Sie sich im Kontext der master Datenbank im primären Replikat befinden.
Ändern der Standardgruppe
In diesem Beispiel wird die Ressourcenkontrolle verwendet, um die maximale Größe einer Speichererteilung für alle Benutzerabfragen einzuschränken. Dies geschieht durch Reduzierung der Einstellung REQUEST_MAX_MEMORY_GRANT_PERCENT für die Workload-Gruppe default von den standardmäßigen 25 % auf 10 %. Im Beispiel wird keine Klassifiziererfunktion verwendet. Dies bedeutet, dass die Anmeldeverarbeitung nicht betroffen ist und alle Benutzersitzungen weiterhin in der default Workloadgruppe klassifiziert werden.
Möglicherweise müssen Sie die Größe der Speichererteilungen einschränken, wenn Abfragen auf Arbeitsspeicher warten, da andere Abfragen zu viel Arbeitsspeicher reserviert haben. Weitere Informationen finden Sie unter Behandeln von Problemen mit langsamer Leistung oder geringem Arbeitsspeicher, die durch Speichererteilungen in SQL Server verursacht werden.
Ändern Sie die Standardarbeitsauslastungsgruppe.
ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 10);Aktivieren Sie den Ressourcen-Governor, um unsere Konfiguration wirksam umzusetzen.
ALTER RESOURCE GOVERNOR RECONFIGURE;Überprüfen Sie die neue Einstellung, einschließlich der neuen maximalen Größe einer Speichererteilung.
SELECT group_id, wg.name AS workload_group_name, rp.name AS resource_pool_name, wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_percent, rp.max_memory_kb * wg.request_max_memory_grant_percent_numeric AS request_max_memory_grant_size_kb FROM sys.resource_governor_workload_groups AS wg INNER JOIN sys.dm_resource_governor_resource_pools AS rp ON wg.pool_id = rp.pool_id;Führen Sie das folgende Skript aus, um zur ursprünglichen Konfiguration zurückgesetzt zu werden:
ALTER WORKLOAD GROUP [default] WITH (REQUEST_MAX_MEMORY_GRANT_PERCENT = 25); ALTER RESOURCE GOVERNOR RECONFIGURE; ALTER RESOURCE GOVERNOR DISABLE;
Verwenden einer benutzerdefinierten Workloadgruppe
In diesem Beispiel wird die Ressourcenkontrolle verwendet, um sicherzustellen, dass alle Anforderungen an Sitzungen mit einem bestimmten Anwendungsnamen nicht mit dem Grad der Parallelität (DOP) ausgeführt werden, der höher als vier ist. Dazu klassifizieren Sie Sitzungen in eine Workloadgruppe, wobei die MAX_DOP Einstellung auf 4 festgelegt ist.
Weitere Informationen zum Konfigurieren des maximalen Parallelitätsgrads finden Sie unter Serverkonfiguration: max. Parallelitätsgrad.
Erstellen Sie eine Workloadgruppe, die DOP einschränkt. Die Gruppe verwendet den
defaultRessourcenpool, da wir DOP nur für eine bestimmte Anwendung einschränken möchten, aber keine CPU-, Arbeitsspeicher- oder E/A-Ressourcen reservieren oder einschränken möchten.CREATE WORKLOAD GROUP limit_dop WITH ( MAX_DOP = 4 ) USING [default];Erstellen Sie die Klassifiziererfunktion. Die Funktion verwendet die integrierte APP_NAME() -Funktion, um den in der Clientverbindungszeichenfolge angegebenen Anwendungsnamen zu ermitteln. Wenn der Anwendungsname auf
limited_dop_applicationfestgelegt ist, gibt die Funktion den Namen der Workloadgruppe zurück, die DOP einschränkt. Andernfalls gibt die Funktion den Namen der Workloadgruppe zurückdefault.USE master; GO CREATE FUNCTION dbo.rg_classifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @WorkloadGroupName sysname = N'default'; IF APP_NAME() = N'limited_dop_application' SELECT @WorkloadGroupName = N'limit_dop'; RETURN @WorkloadGroupName; END; GOÄndern Sie die Konfiguration des Ressourcengouverneurs, um unsere Konfiguration effektiv zu gestalten und Ressourcenkontrolle zu aktivieren.
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier); ALTER RESOURCE GOVERNOR RECONFIGURE;Abfrage sys.resource_governor_configuration , um zu überprüfen, ob die Ressourcensteuerung aktiviert ist und die von uns erstellte Klassifiziererfunktion verwendet.
SELECT OBJECT_SCHEMA_NAME(classifier_function_id) AS classifier_schema_name, OBJECT_NAME(classifier_function_id) AS classifier_object_name, is_enabled FROM sys.resource_governor_configuration;classifier_schema_name classifier_object_name is_enabled ---------------------- ---------------------- ---------- dbo rg_classifier 1Überprüfen Sie, ob Sitzungen mit einem bestimmten Anwendungsnamen in die
limit_dopWorkloadgruppe klassifiziert werden, während andere Sitzungen weiterhin in derdefaultWorkloadgruppe klassifiziert werden. Wir verwenden eine Abfrage, die sys.dm_exec_sessions und sys.resource_governor_workload_groups Systemansichten verwendet, um den Anwendungsnamen und den Workloadgruppennamen für die aktuelle Sitzung zurückzugeben.Wählen Sie in SQL Server Management Studio (SSMS) im Hauptmenü " Datei " aus, "Neu", "Datenbankmodulabfrage".
Geben Sie im Dialogfeld "Mit Datenbankmodul verbinden " dieselbe Datenbankmodulinstanz an, in der Sie die Workloadgruppe und die Klassifizierungsfunktion erstellt haben. Wählen Sie die Registerkarte "Zusätzliche Verbindungsparameter " aus, und geben Sie ein
App=limited_dop_application. Dadurch verwendet SSMSlimited_dop_applicationals Anwendungsname, wenn eine Verbindung mit der Instanz hergestellt wird.Wählen Sie "Verbinden" aus, um eine neue Verbindung zu öffnen.
Führen Sie im gleichen Abfragefenster die folgende Abfrage aus:
SELECT s.program_name AS application_name, wg.name AS workload_group_name, wg.max_dop FROM sys.dm_exec_sessions AS s INNER JOIN sys.resource_governor_workload_groups AS wg ON s.group_id = wg.group_id WHERE s.session_id = @@SPID;Es sollte die folgende Ausgabe angezeigt werden, die zeigt, dass die Sitzung in die
limit_dopWorkloadgruppe eingeteilt wurde, wobei der maximale DOP-Wert auf vier festgelegt ist:application_name workload_group_name max_dop ---------------- ------------------- ------- limited_dop_application limit_dop 4Wiederholen Sie die obigen Schritte, geben Sie jedoch nichts in das Feld auf der Registerkarte "Zusätzliche Verbindungsparameter " ein. Die Ausgabe ändert sich, wobei der Standardname der SSMS-Anwendung und die
defaultWorkloadgruppe mit dem Standardwert0für maximale DOP angezeigt werden.application_name workload_group_name max_dop ---------------- ------------------- ------- Microsoft SQL Server Management Studio - Query default 0
Wenn Sie zur erstkonfiguration dieses Beispiels zurückkehren möchten, trennen Sie alle Sitzungen mithilfe der
limit_dopWorkloadgruppe, und führen Sie das folgende T-SQL-Skript aus. Das Skript enthält die folgenden Schritte:- Deaktivieren Sie die Ressourcenkontrolle, damit die Klassifiziererfunktion gelöscht werden kann.
- Löschen Sie die Workloadgruppe. Dies erfordert, dass keine Sitzungen diese Workloadgruppe verwenden.
- Konfigurieren Sie die Ressourcenkontrolle neu, um die effektive Konfiguration ohne die Klassifiziererfunktion und die Workloadgruppe neu zu laden. Dies aktiviert den Resource Governor.
- Deaktivieren Sie die Ressourcenkontrolle, um zur ursprünglichen Konfiguration zurückgesetzt zu werden.
/* Disable resource governor so that the classifier function can be dropped. */ ALTER RESOURCE GOVERNOR DISABLE; ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL); DROP FUNCTION IF EXISTS dbo.rg_classifier; /* Drop the workload group. This requires that no sessions are using this workload group. */ DROP WORKLOAD GROUP limit_dop; /* Reconfigure resource governor to reload the effective configuration without the classifier function and the workload group. This enables resource governor. */ ALTER RESOURCE GOVERNOR RECONFIGURE; /* Disable resource governor to revert to the initial configuration. */ ALTER RESOURCE GOVERNOR DISABLE;
Verwenden mehrerer Ressourcenpools und Workloadgruppen
In diesem Beispiel wird die Ressourcenkontrolle verwendet, um Sitzungen aus einer Auftragsverarbeitungsanwendung in verschiedene Workloadgruppen und Ressourcenpools zu klassifizieren, je nach Tageszeit. Diese Konfiguration weist der Anwendung während der Spitzenverarbeitungszeit weitere Ressourcen zu und schränkt ihre Ressourcen während der Arbeitsstunden ein. Im Beispiel wird davon ausgegangen, dass die Anwendung keine langen Sitzungen verwendet.
Erstellen Sie zwei Ressourcenpools für die Verarbeitung von Spitzenzeiten und arbeitsfreie Stunden.
- Der
peak_hours_poolPool garantiert (reserviert) mindestens 20% der durchschnittlichen CPU-Bandbreite überMIN_CPU_PERCENTund begrenzt die CPU-Bandbreite nicht, indemMAX_CPU_PERCENTauf100festgelegt wird. - Der
off_hours_pool-Pool reserviert keine CPU-Bandbreite, indemMIN_CPU_PERCENTauf0gesetzt wird, begrenzt jedoch die CPU-Bandbreite auf 50%, wenn CPU-Auslastung vorhanden ist, indemMAX_CPU_PERCENTauf50gesetzt wird.
CREATE RESOURCE POOL peak_hours_pool WITH ( MIN_CPU_PERCENT = 20, MAX_CPU_PERCENT = 100 ); CREATE RESOURCE POOL off_hours_pool WITH ( MIN_CPU_PERCENT = 0, MAX_CPU_PERCENT = 50 );Ressourcenpools können Systemressourcen wie CPU, Arbeitsspeicher und E/A reservieren und einschränken. Weitere Informationen finden Sie unter CREATE RESOURCE POOL.
- Der
Erstellen Sie zwei Workloadgruppen, jeweils eine für jeden Ressourcenpool.
peak_hours_groupbegrenzt die Anzahl der gleichzeitigen Anforderungen nicht, indemGROUP_MAX_REQUESTSauf den Standardwert von0gesetzt wird.- Die
off_hours_groupbegrenzt die Anzahl der gleichzeitigen Anforderungen für alle Sitzungen, die in diese Gruppe klassifiziert sind, durch Festlegen vonGROUP_MAX_REQUESTSauf200.
CREATE WORKLOAD GROUP peak_hours_group WITH ( GROUP_MAX_REQUESTS = 0 ) USING peak_hours_pool; CREATE WORKLOAD GROUP off_hours_group WITH ( GROUP_MAX_REQUESTS = 200 ) USING off_hours_pool;Workloadgruppen definieren Richtlinien, z. B. die maximale Anzahl von Anforderungen, den maximalen Grad an Parallelität und die maximale Größe der Speicherzuteilung. Weitere Informationen finden Sie unter CREATE WORKLOAD GROUP.
Erstellen und auffüllen Sie eine Tabelle, die die Zeitintervalle für Spitzen- und Abwesenheitszeiten definiert.
- Jede Zeile in der Tabelle definiert die Start- und Endzeit des Intervalls und den Namen der Workloadgruppe, die während des Intervalls verwendet werden soll.
- Die Start- und Endzeit jedes Intervalls ist inklusive.
- Die Tabelle wird in der
masterDatenbank erstellt, sodass sie in einer schemagebundenen Klassifiziererfunktion verwendet werden kann.
USE master; GO CREATE TABLE dbo.workload_interval ( workload_group_name sysname NOT NULL, start_time time(7) NOT NULL, end_time time(7) NOT NULL, CONSTRAINT pk_workload_interval PRIMARY KEY (start_time, workload_group_name), CONSTRAINT ak_workload_interval_1 UNIQUE (end_time, workload_group_name), CONSTRAINT ck_workload_interval_1 CHECK (start_time < end_time) ); GO INSERT INTO dbo.workload_interval VALUES (N'off_hours_group', '00:00', '06:29:59.9999999'), (N'peak_hours_group', '06:30', '18:29:59.9999999'), (N'off_hours_group', '18:30', '23:59:59.9999999');Erstellen Sie die Klassifiziererfunktion.
- Es wird erwartet, dass die Daten in der Tabelle eine einzelne übereinstimmende Zeile für eine bestimmte Tageszeit aufweisen. Wenn die Daten gegen diese Regel verstoßen, gibt die Funktion den Namen der Workloadgruppe zurück
default. - Die folgende Beispielfunktion gibt
defaultzurück, wenn der von der integrierten APP_NAME()-Funktion zurückgegebene Anwendungsname etwas anderes alsorder_processingist.
USE master; GO CREATE OR ALTER FUNCTION dbo.rg_classifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @WorkloadGroupName sysname = N'default'; SELECT @WorkloadGroupName = workload_group_name FROM dbo.workload_interval WHERE APP_NAME() = N'order_processing' AND CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time; IF @@ROWCOUNT > 1 SELECT @WorkloadGroupName = N'default'; RETURN @WorkloadGroupName; END; GO- Es wird erwartet, dass die Daten in der Tabelle eine einzelne übereinstimmende Zeile für eine bestimmte Tageszeit aufweisen. Wenn die Daten gegen diese Regel verstoßen, gibt die Funktion den Namen der Workloadgruppe zurück
Dies ist ein optionaler Schritt. Anstatt eine Tabelle in der
masterDatenbank zu erstellen, können Sie einen Tabellenkonstruktor verwenden, um die Zeitintervalle direkt in der Klassifiziererfunktion zu definieren. Dies ist der empfohlene Ansatz, wenn die Datengröße klein ist und die Kriterien der Klassifiziererfunktion nicht häufig geändert werden. Hier ist ein Beispiel für denselben Klassifikator, der einen Konstruktor mit Tabellenwert anstelle einer Tabelle inmasterverwendet.USE master; GO CREATE OR ALTER FUNCTION dbo.rg_classifier() RETURNS sysname WITH SCHEMABINDING AS BEGIN DECLARE @WorkloadGroupName sysname = N'default'; SELECT @WorkloadGroupName = workload_group_name FROM ( VALUES (CAST(N'off_hours_group' AS sysname), CAST('00:00' AS time(7)), CAST('06:29:59.9999999' AS time(7))), (CAST(N'peak_hours_group' AS sysname), CAST('06:30' AS time(7)), CAST('18:29:59.9999999' AS time(7))), (CAST(N'off_hours_group' AS sysname), CAST('18:30' AS time(7)), CAST('23:59:59.9999999'AS time(7))) ) AS wg (workload_group_name, start_time, end_time) WHERE APP_NAME() = N'order_processing' AND CAST(GETDATE() AS time(7)) BETWEEN start_time AND end_time; IF @@ROWCOUNT > 1 SELECT @WorkloadGroupName = N'default'; RETURN @WorkloadGroupName; END; GOÄndern Sie die Konfiguration des Ressourcengouverneurs, um unsere Konfiguration effektiv zu gestalten und Ressourcenkontrolle zu aktivieren.
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier); ALTER RESOURCE GOVERNOR RECONFIGURE;Überprüfen Sie, ob die Ressourcensteuerung aktiviert ist, die angegebene Klassifiziererfunktion verwendet, und dass die Klassifiziererfunktion wie im vorherigen Beispiel wie erwartet funktioniert. Dieses Mal geben wir
App=order_processingauf der Registerkarte "Zusätzliche Verbindungsparameter" im SSMS-Dialogfeld "Verbinden" ein, um dem Anwendungsnamen in der Klassifiziererfunktion zu entsprechen. Führen Sie die folgende Abfrage aus, um den Anwendungsnamen, die Workloadgruppe, den Ressourcenpool und die CPU-Reservierung und den Grenzwert für die aktuelle Sitzung zu ermitteln:SELECT s.program_name AS application_name, wg.name AS workload_group_name, wg.group_max_requests, rp.name AS resource_pool_name, rp.min_cpu_percent, rp.max_cpu_percent FROM sys.dm_exec_sessions AS s INNER JOIN sys.resource_governor_workload_groups AS wg ON s.group_id = wg.group_id INNER JOIN sys.resource_governor_resource_pools AS rp ON wg.pool_id = rp.pool_id WHERE s.session_id = @@SPID;Die Ergebnisse hängen von der Tageszeit ab. Wenn die aktuelle Uhrzeit beispielsweise 14:30 ist, wird das Ergebnis angezeigt, dass
peak_hours_groupundpeak_hours_poolverwendet werden.application_name workload_group_name group_max_requests resource_pool_name min_cpu_percent max_cpu_percent ----------------- -------------------- ------------------ ------------------- --------------- --------------- order_processing peak_hours_group 0 peak_hours_pool 20 100Um zur anfänglichen Konfiguration dieses Beispiels zurückzukehren, trennen Sie alle Sitzungen über die Workload-Gruppen
peak_hours_groupundoff_hours_group, und führen Sie das folgende T-SQL-Skript aus. Das Skript enthält die folgenden Schritte:- Deaktivieren Sie die Ressourcenkontrolle, damit die Klassifiziererfunktion gelöscht werden kann.
- Löschen Sie die Workloadgruppen. Dies erfordert, dass keine Sitzungen diese Workloadgruppen verwenden.
- Sobald die Workloadgruppen gelöscht wurden, löschen Sie auch die Ressourcenpools.
- Konfigurieren Sie die Ressourcenkontrolle neu, um die effektive Konfiguration ohne die Klassifiziererfunktion und benutzerdefinierte Workloadgruppen und Ressourcenpools neu zu laden. Dies aktiviert den Resource Governor.
- Deaktivieren Sie die Ressourcenkontrolle, um zur ursprünglichen Konfiguration zurückgesetzt zu werden.
/* Disable resource governor so that the classifier function can be dropped. */ ALTER RESOURCE GOVERNOR DISABLE; ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL); DROP FUNCTION IF EXISTS dbo.rg_classifier; DROP TABLE IF EXISTS dbo.workload_interval; /* Drop the workload groups. This requires that no sessions are using these workload groups. */ DROP WORKLOAD GROUP peak_hours_group; DROP WORKLOAD GROUP off_hours_group; /* Once the workload groups are dropped, drop the resource pools. */ DROP RESOURCE POOL peak_hours_pool; DROP RESOURCE POOL off_hours_pool; /* Reconfigure resource governor to reload the effective configuration without the classifier function and user-defined workload groups and resource pools. This enables resource governor. */ ALTER RESOURCE GOVERNOR RECONFIGURE; /* Disable resource governor to revert to the initial configuration. */ ALTER RESOURCE GOVERNOR DISABLE;
Überwachen des Resource Governor mithilfe von Systemansichten
Beispielabfragen in diesem Abschnitt zeigen, wie Sie Laufzeitstatistiken und Verhalten der Ressourcenverwaltung überwachen können.
Statistiken zur Ressourcenkontrolle sind seit dem letzten Serverneustart kumulativ. Wenn Sie Statistiken ab einer bestimmten Zeit sammeln müssen, können Sie Statistiken mithilfe der ALTER RESOURCE GOVERNOR RESET STATISTICS Anweisung zurücksetzen.
Statistiken zur Ressourcenpoollaufzeit
Für jeden Ressourcenpool verfolgt der Ressourcen-Controller die CPU- und Speicherauslastung, Out-of-Memory-Ereignisse, Speicherzuteilungen, E/A und andere Statistiken. Weitere Informationen finden Sie unter sys.dm_resource_governor_resource_pools.
Die folgende Abfrage gibt eine Teilmenge der verfügbaren Statistiken für alle Ressourcenpools zurück:
SELECT rp.pool_id,
rp.name AS resource_pool_name,
wg.workload_group_count,
rp.statistics_start_time,
rp.total_cpu_usage_ms,
rp.target_memory_kb,
rp.used_memory_kb,
rp.out_of_memory_count,
rp.active_memgrant_count,
rp.total_memgrant_count,
rp.total_memgrant_timeout_count,
rp.read_io_completed_total,
rp.write_io_completed_total,
rp.read_bytes_total,
rp.write_bytes_total,
rp.read_io_stall_total_ms,
rp.write_io_stall_total_ms
FROM sys.dm_resource_governor_resource_pools AS rp
OUTER APPLY (
SELECT COUNT(1) AS workload_group_count
FROM sys.dm_resource_governor_workload_groups AS wg
WHERE wg.pool_id = rp.pool_id
) AS wg;
Arbeitsauslastungsgruppen-Laufzeitstatistiken
Für jede Workloadgruppe verfolgt der Ressourcen-Governor die CPU-Zeit, die Anzahl der Anforderungen, blockierte Aufgaben, Sperrwartezeit, Abfrageoptimierungen und andere Statistiken. Weitere Informationen finden Sie unter sys.resource_governor_workload_groups.
Die folgende Abfrage gibt eine Teilmenge der verfügbaren Statistiken für alle Workloadgruppen zurück:
SELECT wg.name AS workload_group_name,
rp.name AS resource_pool_name,
wg.statistics_start_time,
wg.total_request_count,
wg.total_cpu_usage_ms,
wg.blocked_task_count,
wg.total_lock_wait_time_ms,
wg.total_query_optimization_count,
wg.max_request_grant_memory_kb,
wg.active_parallel_thread_count,
wg.effective_max_dop,
wg.request_max_memory_grant_percent_numeric
FROM sys.dm_resource_governor_workload_groups AS wg
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
Aggregieren von Sitzungen nach Workloadgruppen- und Sitzungsattributen
Die folgende Abfrage gibt eine Verteilung von Sitzungen über Workloadgruppen hinweg und aggregierte Sitzungsstatistiken für jede Workloadgruppe zurück.
Eine hohe Anzahl von Sitzungen mit dem preconnect Status kann auf langsame Ausführung der Klassifizierer hinweisen.
SELECT wg.name AS workload_group_name,
rp.name AS resource_pool_name,
s.program_name AS application_name,
s.login_name,
s.host_name,
s.status,
d.name AS database_name,
MIN(s.login_time) AS first_login_time,
MAX(s.login_time) AS last_login_time,
MAX(s.last_request_start_time) AS last_request_start_time,
COUNT(1) AS session_count
FROM sys.dm_exec_sessions AS s
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON s.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON s.database_id = d.database_id
GROUP BY wg.name,
rp.name,
s.program_name,
s.login_name,
s.host_name,
s.status,
d.name;
Aggregieren von Anforderungen nach Workloadgruppe und Anforderungsattributen
Die folgende Abfrage gibt eine Verteilung von Anforderungen über Workloadgruppen hinweg und aggregierte Anforderungsstatistiken für jede Workloadgruppe zurück:
SELECT wg.name AS workload_group_name,
rp.name AS resource_pool_name,
r.command,
r.status,
d.name AS database_name,
COUNT(1) AS request_count,
MIN(r.start_time) AS first_request_start_time,
MAX(r.start_time) AS last_request_start_time,
SUM(CAST(r.total_elapsed_time AS bigint)) AS total_elapsed_time_ms
FROM sys.dm_exec_requests AS r
INNER JOIN sys.dm_resource_governor_workload_groups AS wg
ON r.group_id = wg.group_id
INNER JOIN sys.dm_resource_governor_resource_pools AS rp
ON wg.pool_id = rp.pool_id
INNER JOIN sys.databases AS d
ON r.database_id = d.database_id
GROUP BY wg.name,
rp.name,
r.command,
r.status,
d.name;
Bewährte Methoden für den Ressourcen-Manager
Konfigurieren Sie dedizierte Administratorverbindung (Dedicated Administrator Connection, DAC), und erfahren Sie, wie Sie sie verwenden. Weitere Informationen finden Sie unter Diagnoseverbindung für Datenbankadministratoren. Wenn Ihre Ressourcensteuerungskonfiguration Fehlfunktionen hat, können Sie DAC verwenden, um sie zu beheben oder die Ressourcensteuerung zu deaktivieren.
Achten Sie beim Konfigurieren von Ressourcenpools darauf, große Werte für
MIN_CPU_PERCENT,MIN_MEMORY_PERCENTundMIN_IOPS_PER_VOLUMEanzugeben. EineMINKonfigurationseinstellung reserviert Ressourcen für einen Ressourcenpool und macht sie für andere Ressourcenpools, einschließlich desdefaultPools, nicht verfügbar. Weitere Informationen finden Sie unter Erstellen eines Ressourcenpools.Die Klassifiziererfunktion erweitert die Anmeldeverarbeitungszeit. Vermeiden Sie komplexe Logik und lange ausgeführte oder ressourcenintensive Abfragen im Klassifizierer, insbesondere, wenn Abfragen große Tabellen verwenden. Eine übermäßig komplexe Funktion kann zu Anmeldeverzögerungen oder Verbindungstimeouts führen.
Wenn Sie im Klassifizierer eine Tabelle verwenden müssen und diese Tabelle klein und hauptsächlich statisch ist, sollten Sie stattdessen einen tabellenwertiger Konstruktor verwenden, wie in einem Beispiel weiter oben in diesem Artikel gezeigt.
Vermeiden Sie die Verwendung einer häufig geänderten Tabelle im Klassifizierer. Dies erhöht das Risiko, Blockierungen zu verursachen, die Anmeldungen verzögern und Verbindungstimeouts verursachen können. Die folgenden Problemumgehungen können das Risiko mindern, haben jedoch Nachteile, einschließlich des Risikos einer falschen Klassifizierung:
- Erwägen Sie die Verwendung des
NOLOCKTabellenhinweiss oder des entsprechendenREADUNCOMMITTEDHinweises. Weitere Informationen finden Sie unter READUNCOMMITTED. - Erwägen Sie die Verwendung der
LOCK_TIMEOUTEinstellung am Anfang der Klassifiziererfunktion, indem Sie sie auf einen niedrigen Wert festlegen, z. B. 1.000 Millisekunden. Weitere Informationen finden Sie unter SET LOCK_TIMEOUT.
- Erwägen Sie die Verwendung des
Wenn Sie
ALTER RESOURCE GOVERNOR RECONFIGUREnach dem Löschen eines nicht verwendeten Ressourcenpools auf einem Computer mit viel Arbeitsspeicher ausführen, kann der Befehl lange dauern. Wenn eine Klassifizierungsfunktion aktiv ist, bevor die Konfiguration neu gestartet wird, können neue Verbindungsversuche, die in diesem Zeitraum unternommen werden, abbrechen.Wenn Sie einen nicht verwendeten Ressourcenpool löschen, wird empfohlen, die Ressourcenkontrolle während eines Wartungsfensters oder einen Zeitraum mit geringer Aktivität neu zu konfigurieren.
Sie können eine Klassifiziererfunktion nicht ändern, während sie in der Ressourcenverwaltungskonfiguration referenziert wird. Sie können die Konfiguration jedoch so ändern, dass eine andere Klassifiziererfunktion verwendet wird. Wenn Sie Änderungen am Klassifizierer vornehmen möchten, sollten Sie ein Paar Klassifiziererfunktionen erstellen. Sie können z. B. erstellen
dbo.rg_classifier_A()unddbo.rg_classifier_B(). Wenn eine Änderung an der Klassifiziererlogik erforderlich ist, führen Sie die folgenden Schritte aus:- Verwenden Sie die ALTER FUNCTION-Anweisung , um die Änderungen an der Funktion vorzunehmen, die derzeit nicht in der Konfiguration der Ressourcenkontrolle verwendet wird.
- Verwenden Sie die ALTER RESOURCE GOVERNOR-Anweisung , um den geänderten Klassifizierer aktiv zu machen, und konfigurieren Sie dann die Ressourcenkontrolle neu. Beispiel:
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier_B); ALTER RESOURCE GOVERNOR RECONFIGURE; - Wenn eine Änderung erneut erforderlich ist, führen Sie dieselben Schritte mit der anderen Funktion aus (
dbo.rg_classifier_A()).
Die Konfiguration der Ressourcenkontrolle wird in der
masterDatenbank gespeichert. Stellen Sie sicher, dass Siemasterregelmäßig sichern, und wissen, wie Sie es wiederherstellen. Weitere Informationen finden Sie unter Sichern und Wiederherstellen: Systemdatenbanken. Da es Einschränkungen beim Wiederherstellenmastergibt, empfiehlt es sich, auch eine Kopie der Konfigurationsskripts für Ressourcenkontrolle separat zu speichern. Sie können die Konfiguration der Ressourcenkontrolle aus Skripts neu erstellen, wenn diemasterDatenbank neu erstellt werden muss.
Verwandte Inhalte
- Ressourcenkontrolle
- Ressourcengouverneur aktivieren
- Resource Governor-Ressourcenpool
- Resource Governor-Workloadgruppe
- Konfigurieren der Ressourcenkontrolle mithilfe einer Vorlage
- Anzeigen und Ändern der Eigenschaften der Ressourcenkontrolle
- ALTER RESOURCE GOVERNOR
- CREATE RESOURCE POOL
- CREATE WORKLOAD GROUP
- CREATE FUNCTION