Steuern von SQL Server-Ressourcen
Während einige SQL Server oder verwaltete Azure SQL-Instanzen für die Datenbanken einer einzelnen Anwendung vorgesehen sind, unterstützt eine Konfiguration häufig in unternehmenskritischen Anwendungen, viele Server unterstützen Datenbanken für mehrere Anwendungen mit unterschiedlichen Leistungsanforderungen und Spitzenlastzyklen. Der Ausgleich dieser unterschiedlichen Anforderungen kann für Administratoren schwierig sein. Eine effektive Möglichkeit zum Verwalten von Serverressourcen ist die Verwendung der Ressourcenkontrolle, die in SQL Server 2008 eingeführt wurde.
Die Ressourcenkontrolle ist ein Feature in SQL Server- und Azure SQL-verwalteten Instanzen, die eine präzise Kontrolle über CPU, physische E/A und Speicherressourcen für eingehende Anwendungsanforderungen ermöglichen. Wenn diese Option auf Instanzebene aktiviert ist, verwendet die Ressourcensteuerung eine Klassifiziererfunktion, um zu definieren, wie Verbindungen behandelt werden, wobei Sitzungen in Workloadgruppen unterteilt werden. Jede Arbeitsauslastungsgruppe wird zur Verwendung eines bestimmten Pools an Systemressourcen konfiguriert.
Ressourcenpools
Ein Ressourcenpool stellt die physischen Ressourcen dar, die auf dem Server verfügbar sind. SQL Server verfügt immer über zwei Pools: Standard und intern, auch wenn die Ressourcensteuerung nicht aktiviert ist. Der interne Pool ist für wichtige SQL Server-Funktionen reserviert und kann nicht eingeschränkt werden. Der Standardpool kann zusammen mit allen ressourcenpools, die Sie explizit definieren, mit Grenzwerten für die ressourcen konfiguriert werden, die sie verwenden können. Für jeden nichtinternen Pool können Sie die folgenden Grenzwerte angeben:
- Minimale/maximale CPU-Nutzung in Prozent
- Obergrenze für CPU-Nutzung in Prozent
- Minimale/maximale Arbeitsspeichernutzung in Prozent
- NUMA-Knotenaffinität
- Minimale/Maximale IOPS-Nutzung pro Volume
Hinweis
Änderungen an einem Ressourcenpool wirken sich nur auf neue Sitzungen aus, nicht auf die bereits ausgeführten Sitzungen. Daher schränkt das Ändern eines Pools die Ressourcen eines lang laufenden Prozesses nicht ein. Die Ausnahme von dieser Regel ist externe Pools, die mit SQL Server Machine Learning Services verwendet werden, was durch eine Pooländerung auch für laufende Sitzungen eingeschränkt werden kann.
Alle Ressourcenpooleinstellungen, mit Ausnahme des minimalen und maximalen CPU-Prozentsatzes, stellen feste Grenzwerte dar, die nicht überschritten werden können. Der Prozentsatz der min/max CPU gilt nur, wenn cpu-Inhalte vorhanden sind. Wenn Sie z. B. maximal 70%festlegen, kann die Workload bis zu 100% der verfügbaren CPU-Zyklen verwenden, wenn keine Schwankungen auftreten. Wenn jedoch andere Workloads ausgeführt werden, wird die Workload auf 70%beschränkt.
Workloadgruppe
Eine Workloadgruppe dient als Container für Sitzungsanforderungen, klassifiziert durch die Klassifiziererfunktion. Ähnlich wie bei Ressourcenpools gibt es zwei integrierte Gruppen: Standard und intern. Jede Workloadgruppe ist einem einzelnen Ressourcenpool zugeordnet, aber ein Ressourcenpool kann mehrere Workloadgruppen hosten. Standardmäßig werden alle Verbindungen an die Standardworkloadgruppe weitergeleitet, es sei denn, die Klassifiziererfunktion weist sie einer benutzerdefinierten Gruppe zu. Die Standardarbeitsauslastungsgruppe verwendet die Ressourcen, die dem Standardressourcenpool zugeordnet sind.
Klassifizierungsfunktion
Die Klassifizierungsfunktion wird zu dem Zeitpunkt ausgeführt, zu dem eine Verbindung mit der SQL Server-Instanz hergestellt wird, und klassifiziert jede Verbindung in eine bestimmte Arbeitsauslastungsgruppe. Wenn die Funktion einen NULL-Wert, einen Standardwert oder den Namen der nicht vorhandenen Workloadgruppe zurückgibt, wird die Sitzung in die Standardarbeitsauslastungsgruppe übertragen. Da die Klassifizierungsfunktion bei jeder Verbindung ausgeführt wird, sollte ihre Effizienz getestet werden. Die folgende Abbildung zeigt das Beispiel einer Klassifizierungsfunktion, die Benutzer basierend auf dem Benutzernamen klassifiziert.
CREATE FUNCTION dbo.RGClassifier()
RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
DECLARE @WorkloadGroup AS SYSNAME
IF(SUSER_NAME() = 'ReportUser')
SET @WorkloadGroup = 'ReportServerGroup'
ELSE IF (SUSER_NAME() = 'PrimaryUser')
SET @WorkloadGroup = 'PrimaryServerGroup'
ELSE
SET @WorkloadGroup = 'default'
RETURN @WorkloadGroup
END
Sie können die Komplexität der im Beispiel gezeigten Funktionsdefinition erhöhen, aber Sie sollten überprüfen, ob sich die komplexere Funktion nicht auf die Benutzerleistung auswirkt.
Anwendungsfälle für den Resource Governor
Die Ressourcenkontrolle wird hauptsächlich in multitenanten Szenarien verwendet, in denen eine Gruppe von Datenbanken eine einzelne SQL Server-Instanz gemeinsam verwendet, und die Leistung muss für alle Benutzer des Servers konsistent gehalten werden. Sie können den Resource Governor auch zum Einschränken der Ressourcen verwenden, die von Wartungsvorgängen wie Konsistenzprüfungen und Indexneuerstellungen verwendet werden, um zu versuchen, während der Wartungsfenster genügend Ressourcen für Benutzeranfragen zu garantieren.