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 2025 (17.x) und höhere Versionen
Wenn Sie die Ressourcenverwaltung tempdb aktivieren, verbessern Sie die Zuverlässigkeit und vermeiden Ausfälle, indem Sie verhindern, dass ungebremste Abfragen oder Workloads einen großen Speicherplatz in tempdb beanspruchen.
Ab SQL Server 2025 (17.x) können Sie den Ressourcenhauptwert verwenden, um einen Grenzwert für die Gesamtmenge des tempdb von einer Workloadgruppe verbrauchten Speicherplatzes zu erzwingen. Wenn eine Anforderung (eine Abfrage) versucht, den Grenzwert zu überschreiten, bricht die Ressourcenverwaltung sie mit einem eindeutigen Fehler ab, der angibt, dass die Workloadgruppengrenze erzwungen wird.
Tatsächlich können Sie den freigegebenen tempdb Speicherplatz unter verschiedenen Workloads partitionieren. Sie können beispielsweise einen höheren Grenzwert für eine Workloadgruppe festlegen, die von einer unternehmenskritischen Anwendung verwendet wird, und einen niedrigeren Grenzwert für die Workloadgruppe festlegen, die default von allen anderen Workloads verwendet wird.
Beispiele für eine schrittweise Konfiguration finden Sie unter Tutorial: Beispiele für die Konfiguration der Governance von Tempdb-Speicherressourcen.
Erste Schritte mit Ressourcenverwaltung
Die Ressourcenkontrolle bietet ein flexibles Framework, um unterschiedliche tempdb Platzbeschränkungen für verschiedene Anwendungen, Benutzer, Benutzergruppen usw. festzulegen. Sie können auch Grenzwerte basierend auf benutzerdefinierter Logik festlegen.
Wenn Sie noch nicht mit dem Ressourcengouverneur in SQL Server vertraut sind, finden Sie informationen zu den Konzepten und Funktionen des Ressourcengouverneurs.
Für eine exemplarische Konfiguration des Ressourcen-Governors und bewährte Methoden, siehe Lernprogramm: Beispiele und bewährte Methoden zur Konfiguration des Ressourcen-Governors.
Festlegen von Grenzwerten für den tempdb-Speicherplatzverbrauch
Sie können den Speicherplatzverbrauch durch eine Workloadgruppe auf eine von zwei Arten einschränken tempdb :
Legen Sie einen festen Grenzwert mithilfe des
GROUP_MAX_TEMPDB_DATA_MBArguments fest.Verwenden Sie den festen Grenzwert, wenn Sie die Arbeitsauslastungsanforderungen
tempdbim Voraus kennen oder wenn sich dietempdbGröße nicht ändert.Legen Sie mithilfe des Arguments einen
GROUP_MAX_TEMPDB_DATA_PERCENTfest.Verwenden Sie die Prozentgrenze, wenn Sie die maximale Größe von
tempdbim Laufe der Zeit ändern könnten und möchten, dass sich der für jede Workloadgruppe verfügbaretempdb-Speicherplatz proportional ändert, ohne die Workloadgruppenkonfiguration zu ändern. Wenn Sie z. B. eine Azure-VM mit SQL Server skalieren und die maximaletempdbGröße erhöhen, steigt auch dertempdbfür jede Workloadgruppe verfügbare Speicherplatz mit einem Prozentgrenzwert.
Weitere Informationen zu den Argumenten GROUP_MAX_TEMPDB_DATA_MB und GROUP_MAX_TEMPDB_DATA_PERCENT finden Sie unter CREATE WORKLOAD GROUP oder ALTER WORKLOAD GROUP.
Wenn Sie sowohl feste als auch Prozentgrenzen für dieselbe Workloadgruppe angeben, hat das feste Limit Vorrang vor dem Prozentgrenzwert.
Bei einer bestimmten SQL Server-Instanz können Sie eine Mischung aus Workloadgruppen mit festen Grenzwerten, Prozentgrenzwerten oder keinen Grenzwerten für tempdb den Speicherplatzverbrauch haben. Informationen zum Anzeigen effektiver Grenzwerte finden Sie im Beispiel für effektive tempdb-Speicherplatzbeschränkungen pro Workloadgruppe .
Prozentgrenzwertkonfiguration
Wenn Sie die ALTER RESOURCE GOVERNOR RECONFIGURE Anweisung ausführen, werden die Prozentgrenzwerte gemäß der folgenden Tabelle wirksam:
| Konfiguration | BESCHREIBUNG | Tempdb-Maximalgröße (100 %) | Prozentwertbegrenzung in Kraft |
|---|---|---|---|
-
GROUP_MAX_TEMPDB_DATA_MB ist nicht festgelegt- Für alle Datendateien ist MAXSIZE nicht UNLIMITED- Für alle Datendateien ist es nicht null. FILEGROWTH |
tempdb Datendateien können automatisch bis zu ihrer maximalen Größe wachsen. |
Die Summe der MAXSIZE Werte für alle Datendateien |
Ja |
-
GROUP_MAX_TEMPDB_DATA_MB ist nicht festgelegt- Für alle Datendateien, MAXSIZE ist UNLIMITED- Für alle Datendateien ist FILEGROWTH gleich null |
tempdb Datendateien werden auf ihre beabsichtigten Größen vorkonfiguriert und können nicht weiter wachsen. |
Die Summe der SIZE Werte für alle Datendateien |
Ja |
| Alle anderen Konfigurationen | Nein |
Zum Anzeigen Ihrer tempdb Konfiguration siehe das Beispiel Tempdb-Datendateikonfiguration anzeigen.
Berücksichtigen Sie bei der Verwendung von Prozentgrenzwerten Folgendes:
Wenn Sie die ALTER RESOURCE GOVERNOR festlegen und ausführen, die Datendateikonfiguration jedoch nicht den Anforderungen entspricht, wird die Anweisung erfolgreich abgeschlossen, und die Prozentgrenzwerte werden gespeichert, aber sie werden nicht erzwungen. In diesem Fall erhalten Sie warnmeldung 10989, Schweregrad 10, der auch im Fehlerprotokoll protokolliert wird:
GROUP_MAX_TEMPDB_DATA_PERCENT is not in effect because tempdb configuration requirements aren't met.Um die Prozentgrenzwerte effektiv zu machen, konfigurieren Sie die
tempdb-Datendateien neu, um die Anforderungen zu erfüllen, und führen SieALTER RESOURCE GOVERNOR RECONFIGUREerneut aus. Weitere Informationen zum Konfigurieren vonSIZE,FILEGROWTHundMAXSIZEfinden Sie unter ALTER DATABASEDatei- und Dateigruppenoptionen.Wenn ein Prozentlimit in Kraft ist und Sie
tempdbDatendateien hinzufügen, entfernen oder die Größe ändern, müssen SieALTER RESOURCE GOVERNOR RECONFIGUREausführen, um den Ressourcen-Manager mit der neuen maximalen Größe vontempdb(100%) zu aktualisieren.
Hinweis
Bei einer neuen SQL Server-Instanz ist die Datendatei MAXSIZEUNLIMITED und FILEGROWTH ist größer als null, was bedeutet, dass Prozentgrenzwerte keine Wirkung haben. Um Prozentgrenzwerte zu verwenden, müssen Sie eine der folgenden Aktionen ausführen:
- Vergrößern Sie
tempdb-Datendateien auf die vorgesehene Größe und legen SieFILEGROWTHauf Null fest. - Legen Sie die
MAXSIZEeinzelnen Datendateien auf einen begrenzten Wert fest. - Stellen Sie für jedes
tempdbDatendateivolume sicher, dass die Summe derMAXSIZEWerte für Dateien auf dem Volume kleiner oder gleich dem verfügbaren Speicherplatz auf dem Volume ist. Wenn ein Volume beispielsweise über 100 GB freien Speicherplatz verfügt und zweitempdbDatendateien enthält, machen Sie dieMAXSIZEeinzelnen Dateien auf 50 GB oder weniger.
Funktionsweise
In diesem Abschnitt wird die Governance von Weltraumressourcen detailliert beschrieben tempdb.
Da Datenseiten
tempdbzugeordnet und freigegeben werden, führt der Resource Governor Buch über den von jeder Workloadgruppe verbrauchten Speicherplatz.Wenn die Ressourcensteuerung aktiviert ist und für eine Workloadgruppe ein
tempdbSpeicherplatzverbrauchslimit festgelegt ist, und eine Anforderung (eine Abfrage), die in der Workloadgruppe ausgeführt wird, versucht, den Gesamtspeicherverbrauchtempdbder Gruppe über dem Grenzwert zu bringen, wird die Anforderung mit Fehler 1138, Schweregrad 17 abgebrochen:Could not allocate a new page for database 'tempdb' because that would exceed the limit set for workload group 'workload-group-name'".Wenn eine Anforderung mit Fehler 1138 abgebrochen wird, wird der Wert in der
total_tempdb_data_limit_violation_countSpalte der sys.dm_resource_governor_workload_groups dynamischen Verwaltungsansicht (DYNAMIC Management View, DMV) um eins erhöht, und dastempdb_data_workload_group_limit_reachederweiterte Ereignis wird ausgelöst.Die Ressourcenkontrolle verfolgt alle
tempdbVerwendungen, die einer Workloadgruppe zugeordnet werden können, einschließlich temporärer Tabellen, Variablen (einschließlich Tabellenvariablen), tabellenwertiger Parameter, nicht temporärer Tabellen, Cursors und Verwendungen vontempdbwährend der Abfrageverarbeitung, wie Spools, Überläufe, Arbeitstabellen und Arbeitsdateien.Der Speicherplatzverbrauch für globale temporäre Tabellen und nichttemporäre Tabellen wird
tempdbunter der Workloadgruppe berücksichtigt, die die erste Zeile in die Tabelle einfügt, auch wenn Sitzungen in anderen Workloadgruppen Zeilen in derselben Tabelle hinzufügen, ändern oder entfernen.Die konfigurierten
tempdbVerbrauchsgrenzwerte für jede Workloadgruppe werden in der sys.resource_governor_workload_groups Katalogansicht in dengroup_max_tempdb_data_mbundgroup_max_tempdb_data_percentspalten verfügbar gemacht.Der aktuelle Verbrauch und der Spitzenverbrauch von
tempdb-Speicherplatz durch eine Workload-Gruppe werden in der DMV sys.dm_resource_governor_workload_groups in den Spaltentempdb_data_space_kbbzw.peak_tempdb_data_space_kbzur Verfügung gestellt.Tipp
tempdb_data_space_kbundpeak_tempdb_data_space_kbSpalten in sys.dm_resource_governor_workload_groups werden beibehalten, auch wenn keine Grenzwerte für dentempdbPlatzverbrauch festgelegt werden.Sie können die Klassifiziererfunktion und Arbeitsauslastungsgruppen erstellen, ohne zunächst Einschränkungen festzulegen. Überwachen Sie
tempdbdie Verwendung durch jede Gruppe im Laufe der Zeit, um repräsentative Nutzungsmuster zu identifizieren, und legen Sie dann nach Bedarf Grenzwerte fest.tempdbDie Nutzung der Versionsspeicher, einschließlich des persistenten Versionsspeichers (PVS), wird nicht gesteuert, wenn die beschleunigte Datenbankwiederherstellung (ADR) aktiviert isttempdb, da Zeilenversionen möglicherweise von Anforderungen in mehreren Workloadgruppen verwendet werden.Der Speicherplatzverbrauch in
tempdbwird als die Anzahl der verwendeten 8-KB-Datenseiten gerechnet. Selbst wenn eine Seite nicht vollständig mit Daten gefüllt ist, fügt sie demtempdbVerbrauch einer Workloadgruppe 8 KB hinzu.tempdbDie Speicherplatzverwaltung wird über die gesamte Lebensdauer der Workload-Gruppe beibehalten. Wenn eine Workloadgruppe verworfen wird, während globale temporäre Tabellen oder nichttemporäre Tabellen mit den Daten, die dieser Workloadgruppe zugeordnet sind, intempdbverbleiben, wird der von diesen Tabellen verwendete Speicherplatz nicht unter einer anderen Workloadgruppe berücksichtigt.tempdbData-Governance steuert den Speicherplatz intempdb-Datendateien, aber nicht den Speicherplatz auf den zugrunde liegenden Volumes. Sofern SietempdbDatendateien nicht vorab auf ihre vorgesehene Größe vergrößern, könnte der Speicherplatz auf den Volumes, auf denen sichtempdbbefindet, von anderen Dateien belegt werden. Wenn kein Platz mehr fürtempdb-Datendateien zum Vergrößern vorhanden ist, könntetempdbkeinen Platz mehr haben, bevor das Workload-Gruppenlimit für dentempdb-Speicherverbrauch erreicht ist.Die Space Resource Governance gilt für Datendateien in
tempdb, jedoch nicht für die Transaktionsprotokolldatei. Um sicherzustellen, dass das Transaktionsprotokolltempdbkeinen großen Speicherplatz belegt, aktivieren Sie ADR intempdb.
Unterschiede bei der Raumnachverfolgung auf Sitzungsebene
Die sys.dm_db_session_space_usage DMV stellt tempdb für jede Sitzung Raumzuweisungs- und Deallocation-Statistiken bereit. Selbst wenn es nur eine Sitzung in einer Workloadgruppe gibt, stimmen die Statistiken zur Raumnutzung aus diesem DMV möglicherweise nicht exakt mit den Statistiken aus der ansicht sys.dm_resource_governor_workload_groups überein, aus den folgenden Gründen:
- Im Gegensatz zu
sys.dm_resource_governor_workload_groups:sys.dm_db_session_space_usage- Spiegelt die Speicherplatznutzung durch die derzeit ausgeführten Aufgaben nicht wider
tempdb. Die Statistiken insys.dm_db_session_space_usagewerden aktualisiert, sobald eine Aufgabe abgeschlossen ist. Statistiken insys.dm_resource_governor_workload_groupswerden kontinuierlich aktualisiert. - Verfolgt keine Indexzuordnungsseiten (IAM) nach. Weitere Informationen finden Sie im Leitfaden zur Seiten- und Erweiterungsarchitektur.
- Spiegelt die Speicherplatznutzung durch die derzeit ausgeführten Aufgaben nicht wider
- Nachdem Zeilen gelöscht wurden oder wenn eine Tabelle, ein Index oder eine Partition gelöscht oder geleert wird, gibt die Datenbank-Engine die Datenseiten frei. Die Deallocation kann synchron oder von einem asynchronen Hintergrundprozess ausgeführt werden.
sys.dm_resource_governor_workload_groupsspiegelt diese Seitenfreigaben wider, selbst wenn die Sitzung, die diese Freigaben verursacht hat, abgeschlossen wurde und insys.dm_db_session_space_usagenicht mehr vorhanden ist.
Bewährte Verfahren für die Ressourcenverwaltung von Tempdb
Bevor Sie die Governance für tempdb-Speicherplatzressourcen konfigurieren, sollten Sie die folgenden bewährten Verfahren berücksichtigen:
Überprüfen Sie die allgemeinen bewährten Methoden für den Ressourcengouverneur.
Vermeiden Sie für die meisten Szenarien das Festlegen des Grenzwerts für den
tempdbSpeicherplatzverbrauch auf einen kleinen Wert oder null, insbesondere für diedefaultWorkloadgruppe. Wenn Sie diesen Grenzwert auf einen kleinen Wert oder null festlegen, können viele häufige Aufgaben möglicherweise fehlschlagen, wenn sie Speicherplatztempdbzuweisen müssen. Wenn Sie z. B. entweder das feste oder das Prozentlimit für diedefaultWorkloadgruppe auf 0 festlegen, können Sie den Objekt-Explorer möglicherweise nicht in SQL Server Management Studio (SSMS) öffnen.Wenn Sie keine benutzerdefinierten Workloadgruppen und keine Klassifizierungsfunktion erstellen, die Workloads ihren jeweils zugewiesenen Gruppen zuordnet, sollten Sie die Verwendung der Workloadgruppe
defaultnichttempdbeinschränken. Wenn Sie den Speicherplatzverbrauch durch dietempdbWorkloadgruppe begrenzendefault, geben Abfragen möglicherweise Fehler 1138 zurück. Dieser Fehler tritt auf, wenntempdbnoch ungenutzten Speicherplatz hat, der von keiner Benutzer-Workload belegt werden kann.Die Summe der
GROUP_MAX_TEMPDB_DATA_MBWerte für alle Workloadgruppen kann die maximaletempdbGröße überschreiten. Wenn die maximaletempdbGröße beispielsweise 100 GB beträgt, können dieGROUP_MAX_TEMPDB_DATA_MBGrenzwerte für Arbeitsauslastungsgruppe A und Workloadgruppe B jeweils 80 GB betragen.Dieser Ansatz verhindert weiterhin, dass jede Workloadgruppe den gesamten Speicherplatz
tempdbverbraucht, indem sie 20 GB für andere Workloadgruppen verlassen. Gleichzeitig vermeiden Sie unnötige Abfrageabbrüche, wenn noch freiertempdbSpeicherplatz verfügbar ist, da Arbeitsauslastungsgruppen A und B nicht gleichzeitig einen großentempdbSpeicherplatz verbrauchen.Ebenso kann die Summe der
GROUP_MAX_TEMPDB_DATA_PERCENTWerte für alle Workloadgruppen 100 Prozent überschreiten. Sie können jeder Gruppe mehrtempdbSpeicherplatz zuweisen, wenn Sie wissen, dass es unwahrscheinlich ist, dass mehrere Gruppen gleichzeitig eine hohetempdbNutzung verursachen.
Examples
Tempdb-Datendateikonfiguration anzeigen
Die folgende Abfrage zeigt die aktuelle tempdb Konfiguration der Datendatei:
SELECT file_id,
name,
size * 8. / 1024 AS size_mb,
IIF (max_size = -1, NULL, max_size * 8. / 1024) AS maxsize_mb,
IIF (is_percent_growth = 0, growth * 8. / 1024, NULL) AS filegrowth_mb,
IIF (is_percent_growth = 1, growth, NULL) AS filegrowth_percent
FROM sys.master_files
WHERE database_id = 2
AND type_desc = 'ROWS';
Für eine bestimmte Datei im Resultset:
- Wenn die
maxsize_mb-SpalteNULList, dann istMAXSIZEUNLIMITED. - Wenn entweder
filegrowth_mboderfilegrowth_percentnull ist, istFILEGROWTHnull.
Anzeigen effektiver tempdb-Speicherplatzbeschränkungen pro Workloadgruppe
Die folgende Abfrage zeigt den effektiven tempdb Speicherplatzverbrauchsgrenzwert für jede Workloadgruppe. Das Limit wird bei einer Konfiguration als festes Limit oder prozentuales Limit in Megabyte zurückgegeben.
Wenn die group_effective_limit_mb Spalte lautet NULL, bedeutet dies eine der folgenden Optionen:
- Weder ein fester noch ein prozentualer Grenzwert ist konfiguriert.
- Die Anforderungen für die Verwendung der Prozentgrenzwertkonfiguration sind nicht erfüllt.
SELECT wg.group_id,
wg.name,
tf.tempdb_max_size_mb,
CASE
WHEN wg.group_max_tempdb_data_mb IS NOT NULL
THEN wg.group_max_tempdb_data_mb
WHEN wg.group_max_tempdb_data_percent IS NOT NULL AND tf.tempdb_max_size_mb IS NOT NULL
THEN 0.01 * wg.group_max_tempdb_data_percent * tf.tempdb_max_size_mb
ELSE NULL END AS group_effective_limit_mb
FROM sys.resource_governor_workload_groups AS wg
CROSS APPLY (
SELECT IIF (SUM(IIF (max_size <> -1
AND growth > 0, 1, 0)) = COUNT(1) /* autogrow up to the maxsize */
OR SUM(IIF (max_size = -1
AND growth = 0, 1, 0)) = COUNT(1), /* pregrown and fixed */
SUM(IIF (growth = 0, size, max_size)) * 8 / 1024., NULL) AS tempdb_max_size_mb
FROM sys.master_files
WHERE database_id = 2
AND type_desc = 'ROWS'
) AS tf;
Nächster Schritt
Verwandte Inhalte
- Ressourcenkontrolle
- Lernprogramm: Konfigurationsbeispiele für Ressourcenverwaltung und bewährte Methoden
- ALTER RESOURCE GOVERNOR (Transact-SQL)
- CREATE WORKLOAD GROUP (Transact-SQL)
- ALTER WORKLOAD GROUP (Transact-SQL)
- DROP WORKLOAD GROUP (Transact-SQL)
- sys.resource_governor_workload_groups
- sys.dm_resource_governor_workload_groups