Ressourcenpool für Resource Governor
Gilt für:SQL ServerAzure SQL Managed Instance
Im Resource Governor stellt ein Ressourcenpool eine Teilmenge der physischen Ressourcen einer Datenbank-Engine-Instanz dar. Über Resource Governor können Sie Grenzwerte für die Gesamt-CPU, physische E/A-Vorgänge und den Arbeitsspeicher festlegen, d. h. Ressourcen, die eingehenden Anwendungsanforderungen im Ressourcenpool zur Verfügung stehen.
Jeder Ressourcenpool kann eine oder mehrere Arbeitsauslastungsgruppen enthalten. Wenn eine Sitzung erstellt wird, wird sie in eine bestimmte Workloadgruppe klassifiziert. Richtlinien für Arbeitsauslastungsgruppen steuern die Anforderungen, die in einer Sitzung ausgeführt werden. Anforderungen verwenden die Ressourcen aus dem zugrunde liegenden Ressourcenpool.
Ressourcenpoolkonzepte
Ein Ressourcenpool stellt die physischen Ressourcen des Servers dar, z. B. CPU, Arbeitsspeicher und E/A. Je nach Konfiguration können Ressourcen in einem Ressourcenpool reserviert oder für andere Pools freigegeben werden. Die Poolkonfiguration wird durch Angeben einer oder mehrerer der folgenden Einstellungen für jeden Ressourcentyp (CPU, Arbeitsspeicher und physische E/A) definiert:
MIN_CPU_PERCENT und MAX_CPU_PERCENT
Diese Einstellungen definieren die Mindest- und Höchstgrenze der garantierten durchschnittlichen CPU-Bandbreite für alle Anforderungen im Ressourcenpool, wenn eine CPU-Auslastung vorliegt. MIN_CPU_PERCENT
ist eine Reservierung der CPU-Bandbreite für den Ressourcenpool, die von anderen Pools nicht verwendet werden kann, wenn ein Engpass vorliegt. MAX_CPU_PERCENT
ist eine weiche Grenze für die CPU-Bandbreite im Pool. Der Grenzwert wird nur durchgesetzt, wenn ein CPU-Konflikt mit anderen Pools besteht.
Angenommen, die Vertriebs- und Marketingabteilungen in einem Unternehmen haben dieselbe SQL Server-Instanz. Die Vertriebsabteilung verfügt über eine CPU-intensive Arbeitsauslastung mit Abfragen hoher Priorität. Die Marketingabteilung verfügt ebenfalls über eine CPU-intensive Arbeitsauslastung, führt jedoch Abfragen mit niedrigerer Priorität aus. Durch das Erstellen eines separaten Ressourcenpools für jede Abteilung können Sie einen minimalen CPU-Prozentsatz von 40 für den Ressourcenpool "Vertrieb" und einen maximalen CPU-Prozentsatz von 30 für den Marketingressourcenpool zuweisen. Diese Konfiguration stellt sicher, dass der Vertriebs-Workload die erforderlichen CPU-Ressourcen erhält und der Marketing-Workload nicht die CPU-Anforderungen des Vertriebs-Workloads beeinträchtigt.
Der maximale CPU-Prozentsatz ein opportunistischer Maximalwert ist. Wenn CPU-Kapazität verfügbar ist, nutzen die Anfragen sie vollständig, bis zu 100 Prozent. Der Maximalwert gilt nur, wenn für CPU-Ressourcen ein Streit vorliegt. Wenn im vorherigen Beispiel die Arbeitsauslastung der Vertriebsabteilung beispielsweise nicht ausgeführt wird, kann die Marketingabteilung die CPU bei Bedarf zu 100 % nutzen.
CAP_CPU_PERCENT
Die Einstellung CAP_CPU_PERCENT
ist ein hartes Limit für die CPU-Bandbreite für alle Anforderungen im Ressourcenpool. Arbeitsauslastungen, die dem Pool zugeordnet sind, können CPU-Kapazität über dem Wert von MAX_CPU_PERCENT
verwenden, wenn sie verfügbar ist, aber nicht über dem Wert von CAP_CPU_PERCENT
. Wir bleiben beim Beispiel im oberen Abschnitt und gehen davon aus, dass die genutzten Ressourcen der Marketingabteilung als Kosten angerechnet werden. Zur besseren Voraussagbarkeit der Kosten soll die CPU-Nutzung bei maximal 30 % gedeckelt werden. Dieses Ziel kann erreicht werden, indem CAP_CPU_PERCENT
auf 30 für den Marketing-Ressourcenpool festgelegt wird.
MIN_MEMORY_PERCENT und MAX_MEMORY_PERCENT
Diese Einstellungen geben die minimale und maximale Kapazität des für den Ressourcenpool reservierten Arbeitsspeichers an, der nicht gemeinsam mit anderen Ressourcenpools verwendet werden kann.
Durch Festlegen eines Minimalspeicherwerts für einen Pool wird der Speicher für Anforderungen reserviert, die in diesem Ressourcenpool ausgeführt werden. Diese Einstellung unterscheidet sich von MIN_CPU_PERCENT
, da der reservierte Speicher möglicherweise im Pool verbleibt, auch wenn keine Anforderungen in den Workloadgruppen vorhanden sind, die zu diesem Pool gehören. Achten Sie beim Verwenden dieser Einstellung darauf, dass dieser Speicher für die Verwendung durch einen anderen Pool nicht verfügbar ist, auch wenn keine aktiven Anforderungen vorhanden sind. Das Festlegen eines maximalen Speicherwerts für einen Pool bedeutet, dass die Anforderungen, wenn sie in diesem Pool ausgeführt werden, niemals mehr als diesen Prozentsatz des Gesamtspeichers erhalten.
Für Datenbanken ohne speicheroptimierte Tabellen ist der durch MIN_MEMORY_PERCENT
und MAX_MEMORY_PERCENT
geregelte Arbeitsspeicher speziell der Arbeitsspeicher des Abfragearbeitsbereichs oder der Arbeitsspeicher für die Abfrageausführung. Der Pufferpoolspeicher (Daten- und Indexseiten) wird stets unter allen Ressourcenpools gemeinsam genutzt und ist nicht durch den Ressourcen-Governor reserviert oder eingeschränkt. Weitere Informationen zu Speicherzuweisungen für die Abfrageausführung finden Sie unter Überlegungen zur Speicherzuweisung. Weitere Informationen zur Verwendung von Ressourcenpools mit speicheroptimierten Tabellen finden Sie unter Binden einer Datenbank mit speicheroptimierten Tabellen an einen Ressourcenpool.
AFFINITY
Mit dieser Einstellung können Sie einen Ressourcenpool einem oder mehreren Zeitplanungsmodulen oder NUMA-Knoten zuordnen, um eine stärkere Isolierung von CPU-Ressourcen zu erzielen. Um das Szenario "Vertrieb und Marketing" aus früheren Abschnitten zu verwenden, gehen wir davon aus, dass die Vertriebsabteilung eine isoliertere Umgebung benötigt und jederzeit 100 Prozent einer logischen CPU benötigt. Mithilfe der Option AFFINITY
können die Vertriebs- und Marketing-Workloads auf verschiedenen logischen CPUs geplant werden. Wenn CAP_CPU_PERCENT
im Marketing-Pool angegeben ist, verwendet die Marketing-Arbeitsauslastung weiterhin maximal 30 Prozent einer CPU, während die Sales-Arbeitsauslastung 100 Prozent einer anderen CPU verwendet.
MIN_IOPS_PER_VOLUME und MAX_IOPS_PER_VOLUME
Diese Einstellungen entsprechen den minimalen und maximalen physischen E/A-Vorgängen, die pro Sekunde und pro Datenträgervolume für einen Ressourcenpool ausgeführt werden. Über diese Einstellungen können Sie die physischen E/A-Vorgänge steuern, die für Benutzeranforderungen in einem bestimmten Ressourcenpools ausgegeben werden. Beispielsweise generiert die Vertriebsabteilung mehrere Monatsabschlussberichte in großen Batches. Die in diesen Batches enthaltenen Abfragen können E/A-Vorgänge erzeugen, die das Datenträgervolume vollständig beanspruchen und die Leistung anderer Arbeitsauslastungen mit höherer Priorität in derselben SQL Server-Instanz beeinträchtigen. Um diese Arbeitsauslastung zu isolieren, wird MIN_IOPS_PER_VOLUME
auf 500 festgelegt, und MAX_IOPS_PER_VOLUME
wird für den Ressourcenpool „Sales department“ auf 2.000 festgelegt.
System- und benutzerdefinierte Ressourcenpools
Der Resource Governor verfügt über zwei integrierte Ressourcenpools, den internal
-Pool und den default
-Pool. Sie können zusätzliche benutzerdefinierte Pools erstellen.
Interner Pool
Der internal
-Pool steuert die von der Datenbank-Engine selbst verbrauchten Ressourcen. Dieser Pool enthält immer nur die internal
Gruppe, und der Pool kann nicht auf irgendeine Weise geändert werden. Der Ressourcenverbrauch durch den internal
-Pool ist nicht eingeschränkt. Alle Arbeitsauslastungen im Pool sind entscheidend, damit die Datenbank-Engine funktioniert. Der Resource Governor ermöglicht es dem internal
-Pool, andere Pools unter Druck zu setzen, selbst wenn dies eine Verletzung der für die anderen Pools festgelegten Grenzwerte bedeutet.
Hinweis
Der Ressourceneinsatz des internal
-Pools und der internal
-Gruppe wird nicht vom Gesamtressourceneinsatz subtrahiert. Prozentwerte werden auf Basis der insgesamt verfügbaren Ressourcen berechnet.
Standardpool
Zunächst enthält der default
-Pool nur die default
-Arbeitsauslastungsgruppe. Sie können den default
Pool nicht erstellen oder ablegen, aber Sie können ihn ändern. Der default
-Pool kann zusätzlich zur default
-Gruppe benutzerdefinierte Workloadgruppen enthalten. Ab SQL Server 2016 (13.x) gibt es zusätzlich zum default
Ressourcenpool für Datenbankmodulvorgänge einen default
externen Ressourcenpool speziell für externe Prozesse, z. B. das Ausführen von R-Skripts.
Hinweis
Die default
-Gruppe kann geändert werden, kann jedoch nicht aus dem default
-Pool verschoben werden.
Externer Pool
Benutzer können einen externen Pool zum Festlegen der Ressourcen für externe Prozesse definieren. Dieser Pool deckt für R Services speziell rterm.exe
, BxlServer.exe
, python.exe
und andere Prozesse ab, die von diesen ausführbaren Dateien generiert werden. Weitere Informationen finden Sie unter CREATE EXTERNAL RESOURCE POOL.
Benutzerdefinierte Ressourcenpools
Sie können benutzerdefinierte Ressourcenpools für bestimmte Workloads in Ihrer Umgebung erstellen. Der Resource Governor stellt DDL-Anweisungen zum Erstellen, Ändern und Löschen von Ressourcenpools bereit. Weitere Informationen finden Sie unter Erstellen eines Ressourcenpools, Löschen eines Ressourcenpoolsund Ändern von Ressourcenpooleinstellungen.
Ressourcenzuordnung zwischen Ressourcenpools
Wenn Sie CPU- und Speicherbeschränkungen und Reservierungen konfigurieren, kann die Summe der MIN
Werte in allen Pools 100 Prozent der Serverressourcen nicht überschreiten. MAX
- und CAP
-Werte können beliebig im Bereich zwischen dem MIN
-Wert und einschließlich 100 Prozent festgelegt werden.
Wenn ein Pool über eine Ressourcenreservierung verfügt, indem ein MIN
-Wert ungleich null angegeben wird, kann der effektive MAX
-Wert anderer Pools reduziert werden. Der kleinste der konfigurierten MAX
-Werte eines Pools und die Summe der MIN
-Werte anderer Pools werden von 100 Prozent subtrahiert.
Die folgenden Tabellen veranschaulichen dieses Konzept. In diesen Tabellen bedeutet LEAST(X, Y)
den kleineren Wert von X
und Y
. Alle numerischen Werte sind Prozentsätze.
Die erste Tabelle enthält die Einstellungen für den internal
Pool, den default
Pool und zwei benutzerdefinierte Pools.
Poolname | MIN |
MAX |
Effective MAX |
Shared % |
Kommentar |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 | Effective MAX und Shared % gelten nicht für den internal Pool. |
default |
0 | 100 | 30 | 30 | Effective MAX = LEAST(100, 100 - (20 + 50)) = 30 Shared % = Effective MAX - MIN = 30 |
Pool 1 |
20 | 100 | 50 | 30 | Effective MAX = LEAST(100, 100 - 50) = 50 Shared % = Effective MAX - MIN = 30 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - 20) = 70 Shared % = Effective MAX - MIN = 20 |
Anhand der vorstehenden Tabelle als Beispiel können wir die Anpassungen, die beim Erstellen eines anderen Ressourcenpools vorgenommen werden, weiter veranschaulichen. Dieser Pool heißt Pool 3
und hat eine MIN
-Einstellung von 5.
Poolname | MIN |
MAX |
Effective MAX |
Shared % |
Kommentar |
---|---|---|---|---|---|
internal |
0 | 100 | 100 | 0 | Effective MAX und Shared % gelten nicht für den internal Pool. |
default |
0 | 100 | 25 | 25 | Effective MAX = LEAST(100, 100 - (20 + 50 + 5)) = 25 Shared % = Effective MAX - MIN = 25 |
Pool 1 |
20 | 100 | 45 | 25 | Effective MAX = LEAST(100, 100 - (50 + 5))) = 45 Shared % = Effective MAX - MIN = 25 |
Pool 2 |
50 | 70 | 70 | 20 | Effective MAX = LEAST(70, 100 - (20 + 5))) = 70 Shared % = Effective MAX - MIN = 20 |
Pool 3 |
5 | 100 | 30 | 25 | Effective MAX = LEAST(100, 100 - (50 + 20))) = 30 Shared % = Effective MAX - MIN = 25 |
Der freigegebene Teil des Pools ist der Ort, an dem die verfügbaren Ressourcen sein können, wenn Ressourcen verfügbar sind. Belegte Ressourcen gehen jedoch in den angegebenen Pool über und sind nicht mehr freigegeben. Dieses Verhalten kann die Ressourcenauslastung in Fällen verbessern, in denen keine Anforderungen in einem bestimmten Pool vorhanden sind und die Ressourcen, die nicht für den Pool reserviert sind, für andere Pools freigegeben werden können.
Einige Sonderfälle der Poolkonfiguration sind:
- Alle Pools weisen Mindestwerte auf, deren Summe 100 Prozent der Serverressourcen ergibt. In diesem Fall entsprechen die effektiven Höchstwerte den Mindestwerten. Dies entspricht dem Aufteilen der Serverressourcen in nicht überlagernde Teile, unabhängig davon, wie Ressourcen innerhalb eines bestimmten Pools verbraucht werden.
- Alle Pools weisen einen Mindestwert von 0 (null) auf. Alle Pools teilen und konkurrieren für verfügbare Ressourcen und deren Laufzeitgrößen basieren auf dem Ressourcenverbrauch in jedem Pool. Andere Faktoren, wie Richtlinien für Arbeitsauslastungsgruppen, spielen eine Rolle bei der Bestimmung der Poolgrößen.
Ressourcenpooltasks
Ressourcenpools können eine Vielzahl von Systemressourcen steuern. Weitere Informationen finden Sie unter CREATE RESOURCE POOL.
Weitere Beispiele und eine vollständige Schritt-für-Schritt-Anleitung finden Sie unter Tutorial: Konfigurationsbeispiele für den Resource Governor und bewährte Methoden.
Aufgabenbeschreibung | Artikel |
---|---|
Ressourcenpool erstellen | Erstellen eines Ressourcenpools |
Ändern der Ressourcenpooleinstellungen | Ressourcenpooleinstellungen ändern |
Löschen eines Ressourcenpools | Löschen eines Ressourcenpools |
Der Resource Governor stellt DDL-Anweisungen zum Erstellen, Ändern und Löschen von Ressourcenpools bereit.
Weitere Informationen, einschließlich der Details zu Reservierungen und Grenzwerten für Ressourcenpools, finden Sie unter: