Resource Governor-Klassifiziererfunktion
Gilt für:SQL Server
Azure SQL Managed Instance
Der Resource Governor-Klassifizierungsprozess kann eine Klassifiziererfunktion verwenden, um einer Arbeitsauslastungsgruppe eingehende Sitzungen zuzuweisen. Die Klassifiziererfunktion enthält Ihre benutzerdefinierte Logik zum Klassifizieren von Sitzungen in Workloadgruppen.
Beispiele für die Konfiguration und Überwachung sowie Informationen zu bewährten Methoden für die Ressourcenkontrolle finden Sie im Lernprogramm: Konfigurationsbeispiele für Ressourcenkontrolle und bewährte Methoden.
Klassifizierung
Mit dem Resource Governor wird jede neue Sitzung in eine Arbeitsauslastungsgruppe klassifiziert. Der Klassifizierer ist eine skalare benutzerdefinierte Funktion, die Sie erstellen. Das Feature enthält die gewünschte Logik, um einer Arbeitsauslastungsgruppe eingehende Sitzungen zuzuweisen. Der skalare Wert, der vom Klassifizierer zurückgegeben wird, ist der Name einer Workloadgruppe, die einer eingehenden Sitzung zugewiesen werden soll.
Wenn der Resource Governor aktiviert ist und die Klassifiziererfunktion in der Resource Governor-Konfiguration angegeben wird, bestimmt die Funktionsausgabe die Arbeitsauslastungsgruppe, die für neue Sitzungen verwendet wird. Andernfalls werden alle Benutzersitzungen in die Arbeitsauslastungsgruppe default
klassifiziert.
Hinweis
Die internal
Workload-Gruppe wird nur für interne Systemanfragen verwendet. Sie können die Kriterien, die zum Zuweisen von Anforderungen in die internal
Workloadgruppe verwendet werden, nicht ändern, und Sie können Anforderungen nicht explizit in die internal
Workloadgruppe klassifizieren.
Führen Sie die folgenden Schritte aus, um mit der Verwendung einer Klassifiziererfunktion zu beginnen:
- Erstellen Sie eine Funktion in der
master
-Datenbank mithilfe von CREATE FUNCTION. Die Funktion muss die Schemabindung verwenden. - Verweisen Sie mithilfe von ALTER RESOURCE GOVERNOR mit dem Parameter
CLASSIFIER_FUNCTION
auf die Funktion in der Resource Governor-Konfiguration. - Verwenden Sie
ALTER RESOURCE GOVERNOR RECONFIGURE
, damit die neue Konfiguration wirksam wird.
Wichtig
Bei Clientverbindungsversuchen können Zeitüberschreitungen auftreten, wenn die Klassifiziererfunktion nicht innerhalb des vom Client konfigurierten Zeitlimits für Verbindungstimeouts abgeschlossen ist. Es ist wichtig, dass Sie Klassifiziererfunktionen erstellen, die die Ausführung beenden, bevor das Verbindungstimeout auftreten kann.
Halten Sie die Klassifiziererfunktion einfach. Vermeiden Sie komplexe oder zeitaufwendige Logik. Vermeiden Sie nach Möglichkeit den Datenzugriff im Klassifizierer.
Die Klassifiziererfunktion weist die folgenden Merkmale und Verhaltensweisen auf:
- Die Funktion wird im Serverbereich (in der
master
-Datenbank) definiert. - Die Funktion wird mit der Schemabindung definiert. Weitere Informationen finden Sie unter SCHEMABINDING.
- Die Funktion wird bei jeder neuen Sitzung ausgewertet, selbst wenn Connection-Pooling aktiviert ist.
- Die Funktion gibt den Arbeitsauslastungsgruppenkontext für die Sitzung zurück. Die Sitzung wird für ihre Lebensdauer der vom Klassifizierer zurückgegebenen Arbeitsauslastungsgruppe zugewiesen.
- Wenn die Funktion
NULL
,default
oder den Namen einer nicht vorhandenen Workload-Gruppe zurückgibt, erhält die Sitzung dendefault
Workload-Gruppenkontext. Die Sitzung erhält auch den Kontextdefault
, falls die Funktion aus irgendeinem Grund fehlschlägt. - Nachdem eine Klassifiziererfunktion mithilfe
ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...)
Anweisung hinzugefügt oder entfernt wurde, wird die Änderung erst wirksam, nachdemALTER RESOURCE GOVERNOR RECONFIGURE
Anweisung ausgeführt wurde. - Es kann jeweils nur eine Funktion als Klassifizierer festgelegt werden.
- Die Klassifiziererfunktion kann nicht geändert oder gelöscht werden, es sei denn, der Klassifizierungsstatus wird mithilfe der
ALTER RESOURCE GOVERNOR (WITH CLASSIFIER_FUNCTION = ...)
-Anweisung entfernt, indem sie den Funktionsnamen aufNULL
oder auf den Namen einer anderen Funktion festlegt. - Wenn keine Klassifiziererfunktion vorhanden ist, werden alle Sitzungen in die
default
Gruppe eingeteilt. - Die in der Ausgabe der Klassifiziererfunktion angegebenen Arbeitsauslastungsgruppen liegen außerhalb des Bereichs der Schemabindungseinschränkung. Sie können beispielsweise keine Tabelle ablegen, auf die in der Klassifiziererfunktion verwiesen wird. Sie können jedoch auch dann eine Workloadgruppe ablegen, wenn der Klassifizierer den Namen dieser Gruppe zurückgibt.
Aktivieren von DAC
Für Problembehandlungs- und Diagnosezwecke empfehlen wir, proaktiv die dedizierte Administratorverbindung (DAC) zu aktivieren und vertraut zu machen. Die DAC unterliegt nicht der Resource Governor-Klassifizierung. Sie können einen DAC verwenden, um eine Klassifizierungsfunktion zu überwachen und zu beheben, auch wenn Ihre Ressourcen-Governor-Konfiguration nicht funktioniert und andere Verbindungen unbrauchbar macht. Weitere Informationen finden Sie unter Diagnoseverbindung für Datenbankadministrierende.
Wenn eine DAC nicht für die Problembehandlung verfügbar ist, können Sie den Server im Einzelbenutzermodus starten. Obwohl die Verbindung im Einzelbenutzermodus nicht der Klassifizierung unterliegt, bietet sie Ihnen nicht die Möglichkeit, die Resource Governor-Klassifizierung während der Ausführung zu diagnostizieren.
Nachdem Sie eine Verbindung mithilfe einer DAC oder mit dem Einzelbenutzermodus hergestellt haben, können Sie die Resource Governor-Konfiguration so ändern, dass eine fehlerhafte Klassifiziererfunktion entfernt wird, oder Sie können Resource Governor deaktivieren.
Anmeldevorgang
Im Kontext des Resource Governors besteht der Anmeldevorgang für eine Sitzung aus den folgenden Schritten:
- Anmeldeauthentifizierung.
- Ausführung des Anmeldetriggers. Tritt nur auf, wenn Anmeldetrigger in der Instanz vorhanden sind.
- Klassifikation.
Wenn die Klassifizierung beginnt, führt der Ressourcen-Governor die Klassifizierungsfunktion aus und verwendet den skalaren Wert, der von der Funktion zurückgegeben wird, um Anforderungen an die passende Arbeitslastgruppe zu senden.
Sie können die Ausführung von Anmeldetriggern und der Klassifiziererfunktion mithilfe der Systemansichten sys.dm_exec_sessions und sys.dm_exec_requests überwachen.
Beispiele
Die Klassifiziererfunktion des Ressourcenkontrollmechanismus kann eine Vielzahl von benutzerdefinierter Logik verwenden. Weitere Beispiele und eine Anleitung finden Sie unter Tutorial: Konfigurationsbeispiele für Ressourcenkontrolle und bewährte Methoden.
A. Hostname
Diese Funktion klassifiziert Sessions von einem bestimmten Hostnamen in eine Workloadgruppe namens Reports
, wobei die eingebaute Systemfunktion HOST_NAME() verwendet wird. Alle anderen Sitzungen werden weiterhin in die Arbeitsauslastungsgruppe default
klassifiziert.
CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp_name sysname = 'default';
IF (HOST_NAME() IN ('reportserver1','reportserver2'))
SET @grp_name = 'Reports';
RETURN @grp_name;
END;
GO
B. Benutzername
Diese Funktion klassifiziert Sitzungen von bestimmten Benutzernamen oder Dienstkontonamen in eine Arbeitsauslastungsgruppe namens Reports
, wobei die integrierte Systemfunktion SUSER_SNAME() verwendet wird. Alle anderen Sitzungen werden weiterhin in die Arbeitsauslastungsgruppe default
klassifiziert.
CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp_name sysname = 'default';
IF (SUSER_SNAME() IN ('Reporting', 'domain/svc_reporting'))
SET @grp_name = 'Reports';
RETURN @grp_name;
END;
GO
C. Anwendungsname
Diese Funktion klassifiziert Sitzungen von bestimmten Anwendungsnamen in eine Arbeitsauslastungsgruppe namens Adhoc
, wobei die integrierte Systemfunktion APP_NAME() verwendet wird. Alle anderen Sitzungen werden nach wie vor der default
Workload-Gruppe zugeordnet.
Wichtig
Eine Anwendung oder ein Benutzer kann einen beliebigen Anwendungsnamen als Teil der Verbindungszeichenfolge angeben. Benutzer können über eine Vielzahl von Anwendungen eine Verbindung herstellen.
CREATE FUNCTION dbo.rg_classifier()
RETURNS sysname
WITH SCHEMABINDING
AS
BEGIN
DECLARE @grp_name sysname = 'default';
IF (APP_NAME() IN ('Microsoft SQL Server Management Studio - Query','azdata'))
SET @grp_name = 'Adhoc';
RETURN @grp_name;
END;
GO