Freigeben über


Tempdb-Platzressourcenverwaltung

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 die Ressourcenkontrolle verwenden, um einen Grenzwert für die Gesamtmenge des tempdb von einer Workloadgruppe verbrauchten Speicherplatzes zu erzwingen. Eine Belastungsgruppe kann einer Anwendung, einem Benutzer, einer Gruppe von Benutzern usw. zugeordnet werden. Wenn eine Anforderung (eine Abfrage) versucht, das Limit zu überschreiten, wird sie vom Resource Governor mit einem eindeutigen Fehler abgebrochen, der anzeigt, dass die Begrenzung der Belastungsgruppe eingehalten wurde.

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 neu im Umgang mit dem Ressourcengouverneur in SQL Server sind, sehen Sie sich Ressourcengouverneur an, um mehr über seine Konzepte und Fähigkeiten zu erfahren.

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_MB Arguments fest.

    Der feste Grenzwert ist nützlich, wenn die Anforderungen an die Arbeitsauslastung tempdb im Voraus bekannt sind oder sich tempdb die Größe nicht ändert.

  • Legen Sie mithilfe des Arguments einen GROUP_MAX_TEMPDB_DATA_PERCENT fest.

    Der Prozentsatzgrenzwert ist nützlich, wenn Sie die maximale Größe von tempdb im Laufe der Zeit ändern möchten, und Sie möchten, dass der für jede Workload-Gruppe verfügbare Speicherplatz proportional angepasst wird, ohne den Ressourcengovernor neu zu konfigurieren. Wenn Sie z. B. eine Azure-VM mit SQL Server skalieren und die maximale tempdb Größe erhöhen, steigt auch der tempdb für jede Workloadgruppe verfügbare Speicherplatz mit einem Prozentgrenzwert.

Weitere Informationen zu den GROUP_MAX_TEMPDB_DATA_MB Und GROUP_MAX_TEMPDB_DATA_PERCENT Argumenten finden Sie unter CREATE WORKLOAD GROUP oder ALTER WORKLOAD GROUP.

Wenn sowohl feste als auch prozentspezifische Grenzwerte für dieselbe Workloadgruppe angegeben werden, hat der feste Grenzwert 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.

Prozentgrenzwertkonfiguration

Die Prozentgrenzwerte sind nur wirksam, wenn die tempdb Datendateikonfiguration die in der folgenden Tabelle zusammengefassten Anforderungen erfüllt:

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, FILEGROWTH ist nicht Null
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

Mit der folgenden Abfrage können Sie die aktuelle tempdb Konfiguration der Datendatei anzeigen:

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-Spalte NULL ist, dann ist MAXSIZEUNLIMITED.
  • Wenn entweder filegrowth_mb oder filegrowth_percent null ist, ist FILEGROWTH null.

Wenn Sie die GROUP_MAX_TEMPDB_DATA_PERCENT 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, GROUP_MAX_TEMPDB_DATA_PERCENT nicht wirksam ist, da tempdb-Konfigurationsanforderungen nicht erfüllt sind. Die Nachricht wird auch im Fehlerprotokoll protokolliert.

Um die Prozentgrenzwerte effektiv zu machen, konfigurieren Sie die tempdb-Datendateien neu, um die Anforderungen zu erfüllen, und führen Sie ALTER RESOURCE GOVERNOR RECONFIGURE erneut aus. Weitere Informationen zum Konfigurieren von SIZE, FILEGROWTH sowie MAXSIZE finden Sie unter "ALTER DATABASE File and Filegroup Options".

Hinweis

Bei einer neuen Instanz von SQL Server ist die Datendatei MAXSIZEUNLIMITED und FILEGROWTH ist größer als null, was bedeutet, dass die Prozentgrenzen nicht wirksam sind. 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 Sie FILEGROWTH auf Null fest.
  • Legen Sie die MAXSIZE einzelnen Datendateien auf einen begrenzten Wert fest.
    • Stellen Sie für jedes tempdb Datendateivolume sicher, dass die Summe der MAXSIZE Werte 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 zwei tempdb Datendateien enthält, machen Sie die MAXSIZE einzelnen Dateien auf 50 GB oder weniger.

Wenn ein Prozentlimit in Kraft ist und Sie tempdb Datendateien hinzufügen, entfernen oder die Größe ändern, müssen Sie ALTER RESOURCE GOVERNOR RECONFIGURE ausführen, um den Ressourcen-Manager mit der neuen maximalen Größe von tempdb (100%) zu aktualisieren.

Funktionsweise

In diesem Abschnitt wird die Governance von Weltraumressourcen detailliert beschrieben tempdb.

  • Da Datenseiten tempdb zugeordnet 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 tempdb Speicherplatzverbrauchslimit festgelegt ist, und eine Anforderung (eine Abfrage), die in der Workloadgruppe ausgeführt wird, versucht, den Gesamtspeicherverbrauch tempdb der Gruppe über den Grenzwert zu bringen, wird die Anforderung mit Fehler 1138, Schweregrad 17 abgebrochen, konnte keine neue Seite für die Datenbank "tempdb" zuordnen, da dies den grenzwert für die Workloadgruppe "Workload-Group-name" überschreitet.

    Wenn eine Anforderung mit Fehler 1138 abgebrochen wird, wird der Wert in der total_tempdb_data_limit_violation_count Spalte der sys.dm_resource_governor_workload_groups dynamischen Verwaltungsansicht (DYNAMIC Management View, DMV) um eins erhöht, und das tempdb_data_workload_group_limit_reached erweiterte Ereignis wird ausgelöst.

  • Die Ressourcenkontrolle verfolgt alle tempdb Verwendungen, 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 von tempdb während der Abfrageverarbeitung, wie Spools, Überläufe, Arbeitstabellen und Arbeitsdateien.

    Der Speicherplatzverbrauch für globale temporäre Tabellen und nichttemporäre Tabellen wird tempdb unter 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 tempdb Verbrauchsgrenzwerte für jede Workloadgruppe werden in der sys.resource_governor_workload_groups Katalogansicht in den group_max_tempdb_data_mb und group_max_tempdb_data_percent spalten 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 Spalten tempdb_data_space_kb bzw. peak_tempdb_data_space_kb zur Verfügung gestellt.

    Tipp

    tempdb_data_space_kb und peak_tempdb_data_space_kb Spalten in sys.dm_resource_governor_workload_groups werden beibehalten, auch wenn keine Grenzwerte für den tempdb Platzverbrauch festgelegt werden.

    Sie können die Klassifiziererfunktion und Arbeitsauslastungsgruppen erstellen, ohne zunächst Einschränkungen festzulegen. Überwachen Sie tempdb die Verwendung durch jede Gruppe im Laufe der Zeit, um repräsentative Nutzungsmuster zu identifizieren, und legen Sie dann nach Bedarf Grenzwerte fest.

  • Tempdb Die Nutzung der Versionsspeicher, einschließlich des persistenten Versionsspeichers (PVS), wird nicht gesteuert, wenn die beschleunigte Datenbankwiederherstellung (ADR) aktiviert ist tempdb, da Zeilenversionen möglicherweise von Anforderungen in mehreren Workloadgruppen verwendet werden.

  • Der Speicherplatzverbrauch in tempdb wird als die Anzahl der verwendeten 8-KB-Datenseiten gerechnet. Selbst wenn eine Seite nicht vollständig mit Daten gefüllt ist, fügt sie dem tempdb Verbrauch einer Workloadgruppe 8 KB hinzu.

  • Tempdb Die 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, in tempdb verbleiben, wird der von diesen Tabellen verwendete Speicherplatz nicht unter einer anderen Workloadgruppe berücksichtigt.

  • Tempdb Data-Governance steuert den Speicherplatz in tempdb-Datendateien, aber nicht den Speicherplatz auf den zugrunde liegenden Volumes. Wenn Sie tempdb-Datendateien nicht vorab auf die vorgesehene Größe vergrößern, wird der Platz auf dem/den Volume(s), auf dem/denen sich tempdb befindet, möglicherweise von anderen Dateien belegt. Wenn kein Platz mehr für tempdb-Datendateien zum Vergrößern vorhanden ist, könnte tempdb keinen Platz mehr haben, bevor das Workload-Gruppenlimit für den tempdb-Speicherverbrauch erreicht ist.

  • Die Space Resource Governance gilt für Datendateien in tempdb, jedoch nicht für die Transaktionsprotokolldatei. Um sicherzustellen, dass das Transaktionsprotokoll tempdb keinen großen Speicherplatz belegt, aktivieren Sie ADR in tempdb.

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 von diesem DMV bereitgestellten Raumnutzungsstatistiken möglicherweise nicht exakt mit den statistiken überein, die in der ansicht sys.dm_resource_governor_workload_groups bereitgestellt werden, 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 in sys.dm_db_session_space_usage werden aktualisiert, sobald eine Aufgabe abgeschlossen ist. Statistiken in sys.dm_resource_governor_workload_groups werden kontinuierlich aktualisiert.
    • Verfolgt keine Indexzuordnungsseiten (IAM) nach. Weitere Informationen finden Sie im Architekturhandbuch für Seiten und Extents.
  • Nachdem Zeilen gelöscht wurden oder wenn eine Tabelle, ein Index oder eine Partition entfernt oder gekürzt wird, können Datenseiten möglicherweise von einem asynchronen Hintergrundprozess zum Freigeben freigegeben werden. Diese Seiten-Freigabe kann verzögert auftreten. sys.dm_resource_governor_workload_groups spiegelt diese Seitenfreigaben wider, selbst wenn die Sitzung, die diese Freigaben verursacht hat, abgeschlossen wurde und in sys.dm_db_session_space_usage nicht 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 tempdb Speicherplatzverbrauch auf einen kleinen Wert oder null, insbesondere für die default Workloadgruppe. Wenn Sie dies tun, können viele häufige Aufgaben fehlschlagen, wenn sie Speicherplatz in tempdb zuordnen müssen. Wenn Sie z. B. entweder das feste oder das Prozentlimit für die default Workloadgruppe auf 0 festlegen, können Sie den Objekt-Explorer möglicherweise nicht in SQL Server Management Studio (SSMS) öffnen.

  • Wenn Sie keine benutzerdefinierten Workload-Gruppen und eine Klassifiziererfunktion erstellt haben, die Workloads in ihren dedizierten Gruppen platziert, vermeiden Sie das Beschränken der Nutzung von tempdb durch die default Workload-Gruppe. Dies kann Abfragen mit Fehler 1138 abbrechen, wenn tempdb noch ungenutzten Speicherplatz hat, der von keiner Benutzerlast verwendet werden kann.

  • Es ist zulässig, dass die Summe der GROUP_MAX_TEMPDB_DATA_MB Werte für alle Workloadgruppen die maximale tempdb Größe überschreitet. Wenn die maximale tempdb Größe beispielsweise 100 GB beträgt, können die GROUP_MAX_TEMPDB_DATA_MB Grenzwerte für Arbeitsauslastungsgruppe A und Workloadgruppe B jeweils 80 GB betragen.

    Dieser Ansatz verhindert weiterhin, dass jede Workloadgruppe den gesamten Speicherplatz tempdb verbraucht, indem sie 20 GB für andere Workloadgruppen verlassen. Gleichzeitig vermeiden Sie unnötige Abfrageabbrüche, wenn noch freier tempdb Speicherplatz verfügbar ist, da Arbeitsauslastungsgruppen A und B nicht gleichzeitig einen großen tempdb Speicherplatz verbrauchen.

    Ebenso kann die Summe der GROUP_MAX_TEMPDB_DATA_PERCENT Werte für alle Workloadgruppen 100 Prozent überschreiten. Sie können jeder Gruppe mehr tempdb Speicherplatz zuweisen, wenn Sie wissen, dass es unwahrscheinlich ist, dass mehrere Gruppen gleichzeitig eine hohe tempdb Nutzung verursachen.