Verkleinern der tempdb-Datenbank

Gilt für:SQL ServerAzure SQL Managed Instance

In diesem Artikel werden verschiedene Methoden erläutert, mit denen Sie die tempdb Datenbank in SQL Server verkleinern können.

Sie können eine der folgenden Methoden verwenden, um die Größe von tempdb. Die ersten drei Optionen werden in diesem Artikel beschrieben. Wenn Sie SQL Server Management Studio verwenden möchten, befolgen Sie die Anweisungen unter "Datenbank verkleinern".

Methode Erfordert einen Neustart? Weitere Informationen
ALTER DATABASE Ja Bietet vollständige Kontrolle über die Größe der Standarddateien tempdb (tempdev und templog).
DBCC SHRINKDATABASE Nein Arbeitet auf Datenbankebene.
DBCC SHRINKFILE Nein Mit dieser Option können Sie einzelne Dateien verkleinern.
SQL Server Management Studio Nein Verkleinern sie Datenbankdateien über eine grafische Benutzeroberfläche.

Hinweise

Standardmäßig ist die Datenbank so konfiguriert, dass sie tempdb bei Bedarf automatisch wächst. Daher kann diese Datenbank unerwartet auf eine Größe größer als die gewünschte Größe wachsen. Größere tempdb Datenbankgrößen wirken sich nicht negativ auf die Leistung von SQL Server aus.

Wenn SQL Server gestartet wird, tempdb wird mithilfe einer Kopie der model Datenbank neu erstellt und tempdb auf die zuletzt konfigurierte Größe zurückgesetzt. Die konfigurierte Größe ist die letzte explizite Größe, die mithilfe eines Vorgangs zum Ändern der Dateigröße festgelegt wurde, zALTER DATABASE. B. die MODIFY FILE Option oder die DBCC SHRINKFILE Anweisungen.DBCC SHRINKDATABASE Es sei denn, Sie müssen unterschiedliche Werte verwenden oder eine sofortige Auflösung für eine große tempdb Datenbank erhalten, können Sie auf den nächsten Neustart des SQL Server-Diensts warten, bis die Größe verringert wird.

Sie können verkleinern tempdb , während tempdb die Aktivität fortgesetzt wird. Es kann jedoch vorkommen, dass andere Fehler auftreten, z. B. Blockieren, Deadlocks usw., die verhindern können, dass der Abschluss nicht abgeschlossen wird. Um sicherzustellen, dass eine Verkleinerung tempdb erfolgreich ist, empfehlen wir daher, dies zu tun, während sich der Server im Einzelbenutzermodus befindet oder wenn Sie alle tempdb Aktivitäten beendet haben.

SQL Server zeichnet nur genügend Informationen im tempdb Transaktionsprotokoll auf, um ein Rollback einer Transaktion durchzuführen, aber nicht zum Wiederholen von Transaktionen während der Datenbankwiederherstellung. Dieses Feature erhöht die Leistung von INSERT Anweisungen in tempdb. Darüber hinaus müssen Sie keine Informationen protokollieren, um Transaktionen zu wiederholen, da tempdb jedes Mal neu erstellt wird, wenn Sie SQL Server neu starten. Daher gibt es keine Transaktionen zum Weiterleiten oder Zurücksetzen.

Weitere Informationen zum Verwalten und Überwachen tempdbfinden Sie unter Kapazitätsplanung und Überwachen der tempdb-Verwendung.

Verwenden des Befehls ALTER DATABASE

Hinweis

Dieser Befehl wird nur für die logischen Standarddateien tempdbtempdev und templog. Wenn weitere Dateien hinzugefügt tempdbwerden, können Sie sie nach dem Neustart von SQL Server als Dienst verkleinern. Alle tempdb Dateien werden während des Starts neu erstellt. Sie sind jedoch leer und können entfernt werden. Wenn Sie weitere Dateien entfernen tempdbmöchten, verwenden Sie den ALTER DATABASE Befehl mit der REMOVE FILE Option.

Für diese Methode müssen Sie SQL Server neu starten.

  1. Beenden Sie SQL Server.

  2. Starten Sie an einer Eingabeaufforderung die Instanz im Minimalkonfigurationsmodus. Gehen Sie dazu wie folgt vor:

    1. Ändern Sie an einer Eingabeaufforderung in den Ordner, in dem SQL Server installiert ist (ersetzen <VersionNumber> Und <InstanceName> im folgenden Beispiel):

      cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
      
    2. Wenn es sich bei der Instanz um eine benannte Instanz von SQL Server handelt, führen Sie den folgenden Befehl aus (ersetzen <InstanceName> Sie im folgenden Beispiel):

      sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
      
    3. Wenn die Instanz die Standardinstanz von SQL Server ist, führen Sie den folgenden Befehl aus:

      sqlservr -c -f -mSQLCMD
      

      Hinweis

      Die -c Parameter -f führen dazu, dass SQL Server in einem Minimalkonfigurationsmodus mit einer tempdb Größe von 1 MB für die Datendatei und 0,5 MB für die Protokolldatei gestartet wird. Der -mSQLCMD Parameter verhindert, dass eine andere Anwendung als sqlcmd die Einzelbenutzerverbindung übernimmt.

  3. Stellen Sie eine Verbindung mit SQL Server mit sqlcmd her, und führen Sie dann die folgenden Transact-SQL-Befehle aus. Durch die gewünschte Größe ersetzen <target_size_in_MB> :

    ALTER DATABASE tempdb MODIFY FILE
    (NAME = 'tempdev', SIZE = <target_size_in_MB>);
    
    ALTER DATABASE tempdb MODIFY FILE
    (NAME = 'templog', SIZE = <target_size_in_MB>);
    
  4. Beenden Sie SQL Server. Drücken Sie dazu das Eingabeaufforderungsfenster, Ctrl+C starten Sie SQL Server als Dienst neu, und überprüfen Sie dann die Größe der tempdb.mdf Dateien templog.ldf .

Verwenden des Befehls DBCC SHRINKDATABASE

DBCC SHRINKDATABASE empfängt den Parameter target_percent. Dies ist der gewünschte Prozentsatz des freien Speicherplatzes in der Datenbankdatei, nachdem die Datenbank verkrumpft wurde. Wenn Sie dies verwenden DBCC SHRINKDATABASE, müssen Sie MÖGLICHERWEISE SQL Server neu starten.

  1. Ermitteln Sie den aktuell verwendeten tempdb Speicherplatz mithilfe der sp_spaceused gespeicherten Prozedur. Berechnen Sie dann den Prozentsatz des freien Speicherplatzes, der als Parameter DBCC SHRINKDATABASEverwendet werden soll. Diese Berechnung basiert auf der gewünschten Datenbankgröße.

    Hinweis

    In einigen Fällen müssen Sie möglicherweise ausführen sp_spaceused @updateusage = true , um den verwendeten Speicherplatz neu zu berechnen und einen aktualisierten Bericht zu erhalten. Weitere Informationen finden Sie unter sp_spaceused (Transact-SQL).

    Betrachten Sie das folgenden Beispiel:

    Gehen Sie davon aus, dass tempdb zwei Dateien vorhanden sind: die primäre Datendatei (tempdbMDF), die 1024 MB beträgt, und die Protokolldatei (tempdb.ldf), die 360 MB beträgt. Gehen Sie davon aus, dass sp_spaceused die primäre Datendatei 600 MB Daten enthält. Gehen Sie außerdem davon aus, dass Sie die primäre Datendatei auf 800 MB verkleinern möchten. Berechnen Sie den gewünschten Prozentsatz des freien Speicherplatzes nach dem Verkleinern: 800 MB - 600 MB = 200 MB. Teilen Sie jetzt 200 MB durch 800 MB = 25 Prozent, und das ist Ihre target_percent. Die Transaktionsprotokolldatei wird entsprechend verkrumpft, sodass 25 Prozent oder 200 MB Speicherplatz frei bleiben, nachdem die Datenbank abgeschrumpft wurde.

  2. Stellen Sie eine Verbindung mit SQL Server mit SQL Server Management Studio, Azure Data Studio oder sqlcmd her, und führen Sie dann den folgenden Transact-SQL-Befehl aus. Ersetzen Durch <target_percent> den gewünschten Prozentsatz:

    DBCC SHRINKDATABASE (tempdb, '<target_percent>');
    

Es gibt Einschränkungen mit dem DBCC SHRINKDATABASE Befehl auf tempdb. Die Zielgröße für Daten- und Protokolldateien darf nicht kleiner als die Größe sein, die beim Erstellen der Datenbank angegeben wurde, oder kleiner als die letzte Größe, die explizit mit einem Dateigrößeänderungsvorgang festgelegt wurde, z ALTER DATABASE . B. die Option verwendet MODIFY FILE wird. Eine weitere Einschränkung DBCC SHRINKDATABASE ist die Berechnung des target_percentage Parameters und dessen Abhängigkeit vom aktuellen Leerraum, der verwendet wird.

Verwenden des Befehls DBCC SHRINKFILE

Verwenden Sie den DBCC SHRINKFILE Befehl, um die einzelnen tempdb Dateien zu verkleinern. DBCC SHRINKFILE bietet mehr Flexibilität, als DBCC SHRINKDATABASE weil Sie sie in einer einzelnen Datenbankdatei verwenden können, ohne dass sich dies auf andere Dateien auswirkt, die derselben Datenbank angehören. DBCC SHRINKFILE empfängt den target_size Parameter. Dies ist die gewünschte endgültige Größe für die Datenbankdatei.

  1. Bestimmen Sie die gewünschte Größe für die primäre Datendatei (tempdb.mdf), die Protokolldatei (templog.ldf) und zusätzliche Dateien, die tempdbhinzugefügt werden. Stellen Sie sicher, dass der in den Dateien verwendete Speicherplatz kleiner oder gleich der gewünschten Zielgröße ist.

  2. Stellen Sie eine Verbindung mit SQL Server mit SQL Server Management Studio, Azure Data Studio oder sqlcmd her, und führen Sie dann die folgenden Transact-SQL-Befehle für die spezifischen Datenbankdateien aus, die Sie verkleinern möchten. Durch die gewünschte Größe ersetzen <target_size_in_MB> :

    USE tempdb;
    GO
    
    -- This command shrinks the primary data file
    DBCC SHRINKFILE (tempdev, '<target_size_in_MB>');
    GO
    
    -- This command shrinks the log file, examine the last paragraph.
    DBCC SHRINKFILE (templog, '<target_size_in_MB>');
    GO
    

Ein Vorteil DBCC SHRINKFILE ist, dass die Größe einer Datei auf eine Größe reduziert werden kann, die kleiner als die originale Größe ist. Sie können DBCC SHRINKFILE probleme mit einer der Daten- oder Protokolldateien. Sie können die Datenbank nicht kleiner als die Größe der model Datenbank machen.

Fehler 8909 beim Ausführen von Verkleinerungsvorgängen

Wenn tempdb sie verwendet wird und Sie versuchen, sie mithilfe der DBCC SHRINKDATABASE Befehle DBCC SHRINKFILE oder Befehle zu verkleinern, erhalten Sie möglicherweise Nachrichten, die in Abhängigkeit von der verwendeten SQL Server-Version wie folgt aussehen:

Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).

Dieser Fehler zeigt keine echte Beschädigung in tempdb. Es kann jedoch andere Gründe für physische Datenbeschädigungsfehler wie Fehler 8909 geben, und dass diese Gründe E/A-Subsystemprobleme enthalten. Wenn der Fehler außerhalb von Verkleinerungsvorgängen auftritt, sollten Sie daher weitere Untersuchungen durchführen.

Obwohl eine 8909-Nachricht an die Anwendung oder an den Benutzer zurückgegeben wird, der den Verkleinerungsvorgang ausführt, schlägt die Verkleinerungsvorgänge nicht fehl.

Siehe auch

Nächste Schritte