Verkleinern der tempdb-Datenbank
Gilt für: SQL Server Azure 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
zu verändern. Die ersten drei Optionen werden in diesem Artikel beschrieben. Wenn Sie SQL Server Management Studio (SSMS) verwenden möchten, befolgen Sie die Anweisungen unter Datenbank verkleinern.
Methode | Neustart erforderlich? | Weitere Informationen |
---|---|---|
ALTER DATABASE |
Ja | Bietet vollständige Kontrolle über die Größe der Standarddateien tempdb (tempdev und templog ). |
DBCC SHRINKDATABASE |
No | Arbeitet auf Datenbankebene. |
DBCC SHRINKFILE |
No | Mit dieser Option können Sie einzelne Dateien verkleinern. |
SQL Server Management Studio | No | Verkleinern sie Datenbankdateien über eine grafische Benutzeroberfläche. |
Hinweise
Standardmäßig ist die tempdb
Datenbank so konfiguriert, dass sie 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, wird mithilfe einer Kopie der model
Datenbank tempdb
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, z. B. ALTER DATABASE
, die die MODIFY FILE
Option oder die DBCC SHRINKFILE
oder DBCC SHRINKDATABASE
Anweisungen verwendet. 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 tempdb
verkleinern, während die tempdb
Aktivität fortgesetzt wird. Es kann jedoch vorkommen, dass andere Fehler auftreten, z. B. Blockieren, Deadlocks usw., die verhindern können, dass die Verkleinerung nicht abgeschlossen wird. Um sicherzustellen, dass eine Verkleinerung von tempdb
erfolgreich ist, empfehlen wir daher, dies zu tun, während sich der Server im Einzelbenutzermodus befindet oder wenn Sie alle tempdb
Aktivitäten beenden.
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 von tempdb
finden Sie unter Kapazitätsplanung und Überwachen der tempdb-Verwendung.
Verwenden Sie den ALTER DATABASE-Befehl
Hinweis
Dieser Befehl wird nur für die logischen Standarddateien tempdb
tempdev
und templog
ausgeführt. Wenn weitere Dateien zu tempdb
hinzugefügt werden, 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 in tempdb
entfernen möchten, verwenden Sie den ALTER DATABASE
Befehl mit der REMOVE FILE
Option.
Für diese Methode müssen Sie SQL Server neu starten.
Beenden Sie SQL Server.
Starten Sie an einer Eingabeaufforderung die Instanz im Minimalkonfigurationsmodus. Gehen Sie dazu wie folgt vor:
Ändern Sie an einer Eingabeaufforderung in den Ordner, in dem SQL Server installiert ist (
<VersionNumber>
und<InstanceName>
im folgenden Beispiel ersetzen):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
Wenn es sich bei der Instanz um eine benannte Instanz von SQL Server handelt, führen Sie den folgenden Befehl aus (
<InstanceName>
im folgenden Beispiel ersetzen):sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
Wenn die Instanz die Standardinstanz von SQL Server ist, führen Sie den folgenden Befehl aus:
sqlservr -c -f -mSQLCMD
Hinweis
Die Parameter
-c
und-f
führen dazu, dass SQL Server in einem Minimalkonfigurationsmodus mit einertempdb
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.
Stellen Sie eine Verbindung mit sqlcmd her und führen Sie dann die folgenden Transact-SQL-Befehle aus.
<target_size_in_MB>
durch die gewünschte Größe ersetzen:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);
Beenden Sie SQL Server. Drücken Sie dazu
Ctrl+C
im Eingabeaufforderungsfenster, starten Sie SQL Server als Dienst neu, und überprüfen Sie dann die Größe der Dateientempdb.mdf
undtemplog.ldf
.
Verwenden des BEFEHLS DBCC SHRINKDATABASE
DBCC SHRINKDATABASE
empfängt den Parameter target_percent
. Dies ist der gewünschte Prozentsatz an freiem Speicherplatz, der in der Datenbankdatei übrig ist, nachdem die Datenbank verkleinert wurde. Wenn Sie DBCC SHRINKDATABASE
verwenden, müssen Sie SQL Server möglicherweise neu starten.
Ermitteln Sie den aktuell in
tempdb
verwendeten Speicherplatz mithilfe dersp_spaceused
gespeicherten Prozedur. Berechnen Sie dann den Prozentsatz des freien Speicherplatzes, der als Parameter fürDBCC SHRINKDATABASE
verwendet werden soll. Diese Berechnung basiert auf der gewünschten Datenbankgröße.Hinweis
In einigen Fällen müssen Sie möglicherweise
sp_spaceused @updateusage = true
ausführen, um den verwendeten Speicherplatz neu zu berechnen und einen aktualisierten Bericht zu erhalten. Weitere Informationen finden Sie unter sp_spaceused.Betrachten Sie das folgende Beispiel:
Gehen Sie davon aus, dass in
tempdb
zwei Dateien vorhanden sind: die primäre Datendatei (tempdb
.mdf), die 1.024 MB beträgt, und die Protokolldatei (tempdb.ldf
), die 360 MB beträgt. Gehen Sie davon aus, dass insp_spaceused
die primäre Datendatei mit 600 MB Daten enthalten ist. 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 Ihretarget_percent
. Die Transaktionsprotokolldatei wird entsprechend verkleinert, sodass 25 Prozent oder 200 MB Speicherplatz frei bleiben, nachdem die Datenbank verkleinert wurde.Stellen Sie eine Verbindung mit SQL Server mit SSMS, Azure Data Studio oder sqlcmd her, und führen Sie dann den folgenden Transact-SQL-Befehl aus.
<target_percent>
durch den gewünschten Prozentsatz ersetzen: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ößenänderungsvorgang festgelegt wurde, z . B. ALTER DATABASE
, die die Option MODIFY FILE
verwendet. Eine weitere Einschränkung von DBCC SHRINKDATABASE
ist die Berechnung des target_percentage
Parameters und dessen Abhängigkeit vom aktuellen Raum, 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.
Bestimmen Sie die gewünschte Größe für die primäre Datendatei (
tempdb.mdf
), die Protokolldatei (templog.ldf
) und zusätzliche Dateien, dietempdb
hinzugefügt werden. Stellen Sie sicher, dass der in den Dateien verwendete Speicherplatz kleiner oder gleich der gewünschten Zielgröße ist.Stellen Sie eine Verbindung mit SQL Server mit SSMS, 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.
<target_size_in_MB>
durch die gewünschte Größe ersetzen: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 von DBCC SHRINKFILE
ist, dass die Größe einer Datei auf eine Größe reduziert werden kann, die kleiner als die Originalgröße ist. Sie können DBCC SHRINKFILE
auf einer der Daten- oder Protokolldateien erstellen. 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
verwendet wird und Sie versuchen, sie mithilfe der Befehle DBCC SHRINKDATABASE
oder DBCC SHRINKFILE
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 es kann sein, 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, schlagen die Verkleinerungsvorgänge nicht fehl.
Zugehöriger Inhalt
- Überlegungen zu den Einstellungen für automatische Vergrößerung und Verkleinerung in SQL Server
- Datenbankdateien und Dateigruppen
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- Verkleinern einer Datenbank
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Löschen von Daten- oder Protokolldateien aus einer Datenbank
- Verkleinern einer Datei