Freigeben über


Anleitung: Beispiele für die Konfiguration der Governance von tempdb-Ressourcen

Gilt für: SQL Server 2025 (17.x) und höhere Versionen

Beispiele in diesem Artikel zeigen, wie Sie Grenzwerte für tempdb den Platzverbrauch festlegen und den Speicherplatzverbrauch tempdb für jede Workloadgruppe anzeigen.

Eine Einführung in die tempdb Governance von Space-Ressourcen finden Sie unter Tempdb Space Resource Governance.

Diese Beispiele sollen Ihnen helfen, sich mit der tempdb Weltraumressourcen-Verwaltung in einer Test-, nicht-produktiven Umgebung vertraut zu machen.

Beispiele gehen davon aus, dass die Ressourcensteuerung anfangs nicht aktiviert ist und dass die Konfiguration nicht von der Standardeinstellung geändert wird. Sie gehen auch davon aus, dass alle anderen Workloads in Ihrer SQL Server-Instanz nicht wesentlich zur tempdb Speicherplatznutzung beitragen, während Sie die Skripts ausführen.

Festlegen eines festen Grenzwerts für die default Workloadgruppe

In diesem Beispiel wird die Gesamtspeichernutzung tempdb durch die Anforderungen (Abfragen) in der default Workloadgruppe auf ein festes Limit beschränkt.

  1. Ändern Sie die default Workloadgruppe, um einen festen Grenzwert von 20 GB für den tempdb Speicherplatzverbrauch zu konfigurieren.

    ALTER WORKLOAD GROUP [default]
    WITH (GROUP_MAX_TEMPDB_DATA_MB = 20480);
    
  2. Aktivieren Sie den Ressourcengouverneur, um die aktuelle Konfiguration effektiv zu gestalten.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  3. Zeigen Sie die Grenzwerte für den tempdb Platzverbrauch an.

    SELECT group_id,
           name,
           group_max_tempdb_data_mb,
           group_max_tempdb_data_percent
    FROM sys.resource_governor_workload_groups
    WHERE name = 'default';
    
  4. Überprüfen Sie den aktuellen Speicherplatzverbrauch der Workloadgruppe tempdb, fügen Sie Daten in default hinzu, indem Sie eine temporäre Tabelle erstellen und eine Zeile einfügen, und überprüfen Sie anschließend erneut den Speicherplatzverbrauch, um die Zunahme zu erkennen.

    SELECT group_id,
           name,
           tempdb_data_space_kb
    FROM sys.dm_resource_governor_workload_groups
    WHERE name = 'default';
    
    SELECT REPLICATE('A', 1000) AS c
    INTO #t;
    
    SELECT group_id,
           name,
           tempdb_data_space_kb
    FROM sys.dm_resource_governor_workload_groups
    WHERE name = 'default';
    
  5. Entfernen Sie optional die Grenzwerte für die default-Gruppe und deaktivieren Sie den Ressourcen-Governor, um den nicht geregelten Speicherplatzverbrauch in tempdb wiederherzustellen.

    ALTER WORKLOAD GROUP [default]
    WITH (GROUP_MAX_TEMPDB_DATA_MB = NULL, GROUP_MAX_TEMPDB_DATA_PERCENT = NULL);
    
    ALTER RESOURCE GOVERNOR DISABLE;
    

Festlegen eines Prozentlimits für die default Workloadgruppe

In diesem Beispiel werden Datendateien so konfiguriert tempdb , dass der Prozentgrenzwert verwendet werden kann, und begrenzt dann den Gesamtspeicherverbrauch tempdb durch die Anforderungen (Abfragen) in der default Workloadgruppe auf ein Prozentlimit.

  1. Legen Sie FILEGROWTH und MAXSIZE für alle tempdb Datendateien so fest, dass die Anforderungen erfüllt werden, und begrenzen Sie die maximale Größe von tempdb auf 1 GB.

    In diesem Beispiel wird davon ausgegangen, dass vier tempdb Datendateien vorhanden sind. Möglicherweise müssen Sie das Skript anpassen, wenn Ihre tempdb Konfiguration eine andere Anzahl von Dateien verwendet, oder wenn die logischen Dateinamen unterschiedlich sind. Möglicherweise müssen Sie auch Ihre SQL Server-Instanz neu starten oder die tempdb Nutzung reduzieren, wenn Sie den Fehler 5040, MODIFY FILE failed for database ‚tempdb‘ ... Größe der Datei ... ist größer als MAXSIZE ... erhalten, wenn Sie dieses Skript ausführen.

    ALTER DATABASE tempdb MODIFY FILE (NAME = N'tempdev', FILEGROWTH = 64 MB, MAXSIZE = 256 MB);
    ALTER DATABASE tempdb MODIFY FILE (NAME = N'temp2', FILEGROWTH = 64 MB, MAXSIZE = 256 MB);
    ALTER DATABASE tempdb MODIFY FILE (NAME = N'temp3', FILEGROWTH = 64 MB, MAXSIZE = 256 MB);
    ALTER DATABASE tempdb MODIFY FILE (NAME = N'temp4', FILEGROWTH = 64 MB, MAXSIZE = 256 MB);
    
  2. Ändern Sie die default Workloadgruppe, um einen Grenzwert von fünf Prozent für den tempdb Speicherplatzverbrauch zu konfigurieren. Mit der maximalen tempdb Größe von 1 GB beschränkt default die Gruppe auf ca. 51 MB tempdb Speicherplatz.

    ALTER WORKLOAD GROUP [default]
    WITH (GROUP_MAX_TEMPDB_DATA_PERCENT = 5);
    
  3. Wenn ein fester Grenzwert festgelegt ist, entfernen Sie ihn, sodass er den Prozentgrenzwert nicht überschreibt.

    ALTER WORKLOAD GROUP [default]
    WITH (GROUP_MAX_TEMPDB_DATA_MB = NULL);
    
  4. Aktivieren Sie die Ressourcensteuerung, um die Konfiguration effektiv zu gestalten.

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  5. Zeigen Sie die Grenzwerte für den tempdb Platzverbrauch an.

    SELECT group_id,
           name,
           group_max_tempdb_data_mb,
           group_max_tempdb_data_percent
    FROM sys.resource_governor_workload_groups
    WHERE name = 'default';
    
  6. Fügen Sie Daten in tempdb hinzu, um den Grenzwert zu erreichen.

    SELECT *
    INTO #m
    FROM sys.messages;
    

    Die Anweisung wird mit Fehler 1138 abgebrochen.

  7. Überprüfen Sie die Arbeitsauslastungsgruppenstatistiken für tempdb.

    SELECT group_id,
           name,
           tempdb_data_space_kb,
           peak_tempdb_data_space_kb,
           total_tempdb_data_limit_violation_count
    FROM sys.dm_resource_governor_workload_groups
    WHERE name = 'default';
    

    Der Wert in der total_tempdb_data_limit_violation_count Spalte wird um 1 erhöht, was zeigt, dass eine Anforderung in der default Workloadgruppe abgebrochen wurde, da der tempdb Speicherplatzverbrauch durch den Ressourcengouverneur eingeschränkt wurde.

  8. Entfernen Sie optional die Grenzwerte für die default-Gruppe und deaktivieren Sie den Ressourcen-Governor, um den nicht geregelten Speicherplatzverbrauch in tempdb wiederherzustellen.

    ALTER WORKLOAD GROUP [default]
    WITH (GROUP_MAX_TEMPDB_DATA_MB = NULL, GROUP_MAX_TEMPDB_DATA_PERCENT = NULL);
    
    ALTER RESOURCE GOVERNOR DISABLE;
    
  9. Optional können Sie die Zuvor in diesem Beispiel vorgenommenen Änderungen an der tempdb Datendateikonfiguration wiederherstellen.

Festlegen eines festen Grenzwerts für eine benutzerdefinierte Workloadgruppe

In diesem Beispiel wird eine neue Workloadgruppe erstellt und dann eine Klassifiziererfunktion zum Zuweisen von Sitzungen mit einem bestimmten Anwendungsnamen zu dieser Workloadgruppe erstellt.

Für dieses Beispiel wird der feste Grenzwert für den tempdb Speicherplatzverbrauch für die Workloadgruppe auf einen kleinen Wert von 1 MB festgelegt. Das Beispiel zeigt dann, dass ein Versuch, Speicherplatz tempdb zuzuweisen, der den Grenzwert überschreitet, abgebrochen wird.

  1. Erstellen Sie eine Workloadgruppe, und beschränken Sie den tempdb Speicherplatzverbrauch auf 1 MB.

    CREATE WORKLOAD GROUP limited_tempdb_space_group
    WITH (GROUP_MAX_TEMPDB_DATA_MB = 1);
    
  2. Erstellen Sie die Klassifiziererfunktion in der master Datenbank. Der Klassifizierer verwendet die integrierte APP_NAME-Funktion , um den in der Clientverbindungszeichenfolge angegebenen Anwendungsnamen zu ermitteln. Wenn der Anwendungsname auf limited_tempdb_application festgelegt ist, gibt die Funktion den Namen der zu verwendenden Workloadgruppe zurück limited_tempdb_space_group . Andernfalls gibt die Funktion den Namen der Workloadgruppe zurück default .

    USE master;
    GO
    
    CREATE FUNCTION dbo.rg_classifier()
    RETURNS sysname
    WITH SCHEMABINDING
    AS
    BEGIN
    
    DECLARE @WorkloadGroupName sysname = N'default';
    
    IF APP_NAME() = N'limited_tempdb_application'
        SELECT @WorkloadGroupName = N'limited_tempdb_space_group';
    
    RETURN @WorkloadGroupName;
    
    END;
    GO
    
  3. Ändern Sie die Ressourcenkontrolle so, dass sie die Klassifiziererfunktion verwendet, und konfigurieren Sie die Ressourcenkontrolle neu, um die neue Konfiguration zu verwenden.

    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = dbo.rg_classifier);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
  4. Öffnen Sie eine neue Sitzung, die in die limited_tempdb_space_group Workloadgruppe eingeteilt ist.

    1. Wählen Sie in SQL Server Management Studio (SSMS) im Hauptmenü " Datei " aus, "Neu", "Datenbankmodulabfrage".

    2. Geben Sie im Dialogfeld "Mit Datenbankmodul verbinden " dieselbe Datenbankmodulinstanz an, in der Sie die Workloadgruppe und die Klassifizierungsfunktion in den vorherigen Schritten erstellt haben.

      Wählen Sie die Registerkarte "Zusätzliche Verbindungsparameter " aus, und geben Sie ein App=limited_tempdb_application. Dadurch verwendet SSMS limited_tempdb_application als Anwendungsname, wenn eine Verbindung mit der Instanz hergestellt wird. Die APP_NAME() Funktion im Klassifizierer gibt diesen Wert ebenfalls zurück.

    3. Wählen Sie "Verbinden" aus, um eine neue Sitzung zu öffnen.

  5. Führen Sie die folgende Anweisung im Abfragefenster aus, das im vorherigen Schritt geöffnet wurde. Die Ausgabe sollte anzeigen, dass Ihre Sitzung in die limited_tempdb_space_group Workloadgruppe eingeteilt ist.

    SELECT wg.name AS workload_group_name
    FROM sys.dm_exec_sessions AS s
    INNER JOIN sys.dm_resource_governor_workload_groups AS wg
    ON s.group_id = wg.group_id
    WHERE s.session_id = @@SPID;
    
  6. Führen Sie die folgende Anweisung im gleichen Abfragefenster aus.

    SELECT REPLICATE('S', 100) AS c
    INTO #t1;
    

    Die Anweisung wird erfolgreich abgeschlossen. Führen Sie die folgende Anweisung im gleichen Abfragefenster aus:

    SELECT REPLICATE(CAST ('F' AS NVARCHAR (MAX)), 1000000) AS c
    INTO #t2;
    

    Die Anweisung wird mit Fehler 1138 abgebrochen, da versucht wird, die 1-MB-Speicherplatzverbrauchsgrenze tempdb für die Workloadgruppe zu überschreiten.

  7. Sehen Sie den aktuellen und den Spitzen-Speicherverbrauch der Workload-Gruppe an.

    SELECT group_id,
           name,
           tempdb_data_space_kb,
           peak_tempdb_data_space_kb,
           total_tempdb_data_limit_violation_count
    FROM sys.dm_resource_governor_workload_groups
    WHERE name = 'limited_tempdb_space_group';
    

    Der Wert in der total_tempdb_data_limit_violation_count Spalte ist "1", der anzeigt, dass eine Anforderung in dieser Workloadgruppe abgebrochen wurde, da der tempdb Speicherplatzverbrauch durch den Ressourcengouverneur eingeschränkt wurde.

  8. Wenn Sie optional zur Erstkonfiguration dieses Beispiels zurückkehren möchten, trennen Sie alle Sitzungen mithilfe der limited_tempdb_space_group Workloadgruppe, und führen Sie das folgende T-SQL-Skript aus:

    /* Disable resource governor so that the classifier function can be dropped. */
    ALTER RESOURCE GOVERNOR DISABLE;
    ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION = NULL);
    DROP FUNCTION IF EXISTS dbo.rg_classifier;
    
    /* Drop the workload group. This requires that no sessions are using this workload group. */
    DROP WORKLOAD GROUP limited_tempdb_space_group;
    
    /* Reconfigure resource governor to reload the effective configuration without the classifier function and the workload group. This enables resource governor. */
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    
    /* Disable resource governor to revert to the initial configuration. */
    ALTER RESOURCE GOVERNOR DISABLE;
    

    Da SSMS Verbindungsparameter auf der Registerkarte "Zusätzliche Verbindungsparameter " behält, müssen Sie den App Parameter beim nächsten Herstellen einer Verbindung mit derselben Datenbankmodulinstanz entfernen. Dadurch wird vermieden, dass Ihre Verbindungen in die limited_tempdb_space_group Workloadgruppe eingeteilt werden, falls vorhanden.