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 tempdb
finden Sie unter Kapazitätsplanung und Überwachen der tempdb-Verwendung.
Verwenden des Befehls ALTER DATABASE
Hinweis
Dieser Befehl wird nur für die logischen Standarddateien tempdb
tempdev
und templog
. Wenn weitere Dateien hinzugefügt tempdb
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 entfernen tempdb
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 (ersetzen
<VersionNumber>
Und<InstanceName>
im folgenden Beispiel):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 (ersetzen
<InstanceName>
Sie im folgenden Beispiel):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
-c
Parameter-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 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>);
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 dertempdb.mdf
Dateientemplog.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.
Ermitteln Sie den aktuell verwendeten
tempdb
Speicherplatz mithilfe dersp_spaceused
gespeicherten Prozedur. Berechnen Sie dann den Prozentsatz des freien Speicherplatzes, der als ParameterDBCC SHRINKDATABASE
verwendet 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 (tempdb
MDF), die 1024 MB beträgt, und die Protokolldatei (tempdb.ldf
), die 360 MB beträgt. Gehen Sie davon aus, dasssp_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 Ihretarget_percent
. Die Transaktionsprotokolldatei wird entsprechend verkrumpft, sodass 25 Prozent oder 200 MB Speicherplatz frei bleiben, nachdem die Datenbank abgeschrumpft wurde.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.
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 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
- Ü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)
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für