Verkleinern der Datenbank "tempdb" in SQL Server

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 307487 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
307487 How to shrink the tempdb database in SQL Server
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Der vorliegende Artikel erläutert drei Methoden, wie Sie die Datenbank tempdb so verkleinern können, dass sie kleiner ist als die zuletzt konfigurierte Größe. Bei der ersten Methode haben Sie zwar die vollständige Kontrolle über die Größe der tempdb-Dateien, sie erfordert jedoch einen Neustart von SQL Server. Bei der zweiten Methode wird die Datenbank tempdb insgesamt verkleinert, wobei gewisse Einschränkungen gelten. So ist zum Beispiel eventuell ein Neustart von SQL Server erforderlich. Mit der dritten Methode können Sie einzelne Dateien in der Datenbank tempdb verkleinern. Bei den letzten beiden Methoden dürfen während des Verkleinerungsvorgangs keinerlei Aktivitäten in der Datenbank tempdb stattfinden.

Hinweis: Sie können diese Methoden auch anwenden, wenn Sie mit SQL Server 2005 arbeiten. Für die Ausführung der hier beschriebenen Operationen sollten Sie jedoch nicht den Enterprise Manager oder den Query Analyzer, sondern SQL Server Management Studio verwenden.


Informationen zu "Tempdb"

Die Datenbank tempdb ist ein temporärer Arbeitsbereich. SQL Server nutzt tempdb unter anderem für:
  • Die Speicherung explizit erstellter temporärer Tabellen.
  • Arbeitstabellen mit Zwischenergebnissen, die während der Verarbeitung von Abfragen und Sortiervorgängen erstellt werden.
  • Materialisierte statische Cursor.
SQL Server speichert nur so viel Informationen im Tempdb-Transaktionsprotokoll, dass zwar ein Rollback einer Transaktion möglich ist, Transaktionen während der Wiederherstellung einer Datenbank jedoch nicht rückgängig gemacht werden können. Dadurch wird die Leistung von INSERT-Anweisungen in "tempdb" verbessert. Außerdem entfällt die Notwendigkeit, Informationen zu protokollieren, um Transaktionen rückgängig zu machen, weil "tempdb" bei jedem Neustart von SQL Server neu erstellt wird; deshalb muss kein Rollforward oder Rollback von Transaktionen durchgeführt werden. Beim Starten von SQL Server wird "tempdb" unter Verwendung einer Kopie der model-Datenbank wiederhergestellt und auf die zuletzt konfigurierte Größe zurückgesetzt.

Standardmäßig ist die Datenbank "tempdb" darauf konfiguriert, dem Bedarf entsprechend automatisch zu wachsen; aus diesem Grund kann die Datenbank nach einiger Zeit eine unerwünschte Größe annehmen. Durch einen einfachen Neustart von SQL Server wird die Größe der Datenbank "tempdb" auf die zuletzt konfigurierte Größe zurückgesetzt. Die konfigurierte Größe ist die zuletzt explizit durch eine Operation zur Änderung der Dateigröße, wie ALTER DATABASE mit der Option MODIFY FILE oder die Anweisung DBCC SHRINKFILE, festgelegte Größe. Dieser Artikel erläutert drei Methoden, wie Sie die Datenbank "tempdb" so verkleinern können, dass sie kleiner ist als die konfigurierte Größe.


Methode 1 zum Verkleinern von "Tempdb"

Diese Methode erfordert einen Neustart von SQL Server.

  1. Beenden Sie SQL Server. Öffnen Sie eine Eingabeaufforderung, und starten Sie dann SQL Server, indem Sie den folgenden Befehl eingeben:

    sqlservr -c -f

    Die Parameter -c und -f bewirken, dass SQL Server im Mindestkonfigurationsmodus mit einer tempdb-Größe von 1 MB für die Datendatei und 0,5 MB für die Protokolldatei gestartet wird.

    Hinweis: Wenn Sie eine benannte SQL Server-Instanz verwenden, müssen Sie in den betreffenden Ordner wechseln (Programme\Microsoft SQL Server\MSSQL$Instanzname\Binn) und die Befehlszeilenoption -s (-s%Instanzname%) verwenden.
  2. Stellen Sie eine Verbindung zu SQL Server mit Query Analyzer her, und führen Sie dann die folgenden Transact-SQL-Befehle aus:
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'tempdev', SIZE = target_size_in_MB) 
       --Desired target size for the data file
    
       ALTER DATABASE tempdb MODIFY FILE
       (NAME = 'templog', SIZE = target_size_in_MB)
       --Desired target size for the log file
    					
  3. Beenden Sie SQL Server durch Drücken der Tastenkombination STRG-C im Fenster einer Eingabeaufforderung, starten Sie SQL Server als Dienst neu, und überprüfen Sie dann die Größe der Dateien "Tempdb.mdf" und "Templog.ldf".
Eine Beschränkung dieser Methode besteht darin, dass sie nur auf die standardmäßigen, logischen tempdb-Dateien tempdev und templog angewendet werden kann. Wurden tempdb weitere Dateien hinzugefügt, können Sie diese verkleinern, nachdem Sie SQL Server als Dienst neu gestartet haben. Alle tempdb-Dateien werden beim Starten neu erstellt; sie sind daher leer und können gelöscht werden. Verwenden Sie den Befehl ALTER DATABASE mit der Option REMOVE FILE, um zusätzliche Dateien in tempdb zu entfernen.

Methode 2 zum Verkleinern von "Tempdb"

Verwenden Sie den Befehl DBCC SHRINKDATABASE, um die Datenbank tempdb in ihrer Gesamtheit zu verkleinern. DBCC SHRINKDATABASE akzeptiert den Parameter target_percent, der den gewünschten Prozentsatz an freiem Speicherplatz angibt, der nach dem Verkleinern der Datenbank in der Datenbankdatei verbleiben soll. Wenn Sie DBCC SHRINKDATABASE verwenden, müssen Sie SQL Server möglicherweise neu starten.

Wichtig: Wenn Sie DBCC SHRINKDATABASE ausführen, darf es keine sonstigen Aktivitäten in Bezug auf die Datenbank tempdb geben. Sie müssen SQL Server im Einzelbenutzermodus starten, um sicherzustellen, dass die Datenbank tempdb während der Ausführung von DBCC SHRINKDATABASE nicht von anderen Prozessen verwendet werden kann. Weitere Informationen finden Sie im Abschnitt Auswirkungen der Ausführung der Befehle DBCC SHRINKDATABASE oder DBCCSHRINKFILE während die Datenbank "Tempdb" in Gebrauch ist dieses Artikels.
  1. Ermitteln Sie den gegenwärtig in der Datenbank tempdb verwendeten Speicherplatz mit der gespeicherten Prozedur sp_spaceused. Berechnen Sie dann den Prozentsatz an freiem Speicher mithilfe eines an DBCC SHRINKDATABASE angehängten Parameters; diese Berechnung basiert auf der gewünschten Datenbankgröße.

    Hinweis: In manchen Fällen müssen Sie sp_spaceused @updateusage=true ausführen, um den verwendeten Speicherplatz neu zu berechnen und einen aktualisierten Bericht zu erhalten. Weitere Informationen zu der gespeicherten Prozedur sp_spaceused finden Sie in der Onlinedokumentation für SQL Server.

    Stellen Sie sich folgendes Beispiel vor:
    Nehmen wir an, dass es in der Datenbank tempdb zwei Dateien gibt: die primäre Datendatei (Tempdb.mdf) mit einer Größe von 100 MB und die Protokolldatei (Tempdb.ldf) mit einer Größe von 30 MB. Nehmen wir ferner an, dass durch den Befehl sp_spaceused gemeldet wird, dass die primäre Datendatei 60 MB Daten enthält. Sie möchten nun beispielsweise die primäre Datendatei auf 80 MB verkleinern. Berechnen Sie den gewünschten Prozentsatz an freiem Speicher nach der Verkleinerung: 80 MB - 60 MB = 20 MB. Dividieren Sie jetzt 20 MB durch 80 MB = 25%; dies ist der Wert für target_percent. Die Transaktionsprotokolldatei wird entsprechend verkleinert, wodurch nach der Verkleinerung der Datenbank 25% oder 20 MB freier Speicher verbleiben.
  2. Stellen Sie eine Verbindung zu SQL Server mit Query Analyzer her, und führen Sie dann die folgenden Transact-SQL-Befehle aus:
       dbcc shrinkdatabase (tempdb, 'target percent') 
       -- This command shrinks the tempdb database as a whole
    					
Für die Anwendung des Befehls DBCC SHRINKDATABASE auf die Datenbank tempdb gelten gewisse Einschränkungen. Die Zielgröße für Daten- und Protokolldateien kann nicht kleiner sein als die Größe, die bei der Erstellung der Datenbank festgelegt wurde, oder als die zuletzt explizit durch eine Operation zur Änderung der Dateigröße, wie ALTER DATABASE mit der Option MODIFY FILE oder die Anweisung DBCC SHRINKFILE, festgelegte Größe. Eine weitere Einschränkung in Bezug auf die Verwendung von DBCC SHRINKDATABASE besteht in der Berechnung des Parameters target_percentage und ihrer Abhängigkeit vom gegenwärtig verwendeten Speicherplatz.



Methode 3 zum Verkleinern von "Tempdb"

Verwenden Sie den Befehl DBCC SHRINKDATABASE, um die einzelnen Dateien in der Datenbank tempdb zu verkleinern. DBCC SHRINKFILE bietet mehr Flexibilität als der Befehl DBCC SHRINKDATABASE, weil Sie ihn auf eine einzelne Datenbankdatei anwenden können, ohne dass dies Auswirkungen auf andere Dateien in derselben Datenbank hätte. DBCC SHRINKFILE akzeptiert den Parameter target size, der die gewünschte Endgröße der Datenbankdatei angibt.

Wichtig: Sie müssen den Befehl DBCC SHRINKFILE ausführen, während es keine sonstigen Aktivitäten in Bezug auf die Datenbank tempdb gibt. Sie müssen SQL Server im Einzelbenutzermodus neu starten, um sicherzustellen, dass die Datenbank tempdb während der Ausführung von DBCC SHRINKFILE nicht von anderen Prozessen verwendet werden kann. Weitere Informationen zum Befehl DBCC SHRINKFILE finden Sie im Abschnitt Auswirkungen der Ausführung der Befehle DBCC SHRINKDATABASE oder DBCCSHRINKFILE während die Datenbank "Tempdb" in Gebrauch ist dieses Artikels.
  1. Bestimmen Sie die gewünschte Größe für die primäre Datendatei (tempdb.mdf), die Protokolldatei (templog.ldf) und/oder weitere Dateien, die der Datenbank tempdb hinzugefügt wurden. Stellen Sie sicher, dass der in den Dateien belegte Speicherplatz kleiner oder gleich als/wie die gewünschte Zielgröße ist.
  2. Stellen Sie eine Verbindung zu SQL Server mit Query Analyzer her, und führen Sie dann die folgenden Transact-SQL-Befehle für die Datenbankdateien aus, die Sie verkleinern möchten:
       use tempdb
       go
    
       dbcc shrinkfile (tempdev, 'target size in MB')
       go
       -- this command shrinks the primary data file
    
       dbcc shrinkfile (templog, 'target size in MB')
       go
       -- this command shrinks the log file, look at the last paragraph.
    						
Ein Vorteil des Befehls DBCC SHRINKFILE ist, dass er eine Datei so verkleinern kann, dass sie noch kleiner ist als ihre ursprüngliche Größe. Sie können DBCC SHRINKFILE auf jede der Daten- oder Protokolldateien anwenden. Eine für den Befehl DBCC SHRINKFILE geltende Einschränkung ist, dass Sie die Datenbank nicht kleiner machen können als die Model-Datenbank.

In SQL Server 7.0 ist die Verkleinerung des Transaktionsprotokolls eine verzögerte Operation. Sie müssen Protokollkürzungen durchführen und eine Sicherungskopie erstellen, um die Verkleinerung der Datenbank zu unterstützen. Standardmäßig ist für die Datenbank tempdb die Option trunc log on chkpt aktiviert (ON); Sie müssen daher keine Protokollkürzung für diese Datenbank anordnen. Weitere Informationen zum Verkleinern des Datenbank-Transaktionsprotokolls in SQL Server 7.0 finden Sie im folgenden Artikel der Microsoft Knowledge Base:
256650 INF: SO WIRD'S GEMACHT: Verkleinern des SQL Server 7.0-Transaktionsprotokolls

Auswirkungen der Ausführung der Befehle DBCC SHRINKDATABASE oder DBCCSHRINKFILE, während die Datenbank "Tempdb" in Gebrauch ist

Falls die Datenbank tempdb in Gebrauch ist und Sie versuchen, sie durch die Befehle DBCC SHRINKDATABASE oder DBCC SHRINKFILE zu verkleinern, werden Ihnen eventuell mehrere Konsistenzfehler wie die folgenden gemeldet und die Verkleinerungsoperation schlägt fehl:
Server: Msg 2501, Ebene 16, Status 1, Zeile 1 Tabelle '1525580473' konnte nicht gefunden werden. Überprüfen Sie sysobjects.
-oder-
Server: Msg 8909, Ebene 16, Status 1, Zeile 0 Tabelle beschädigt: Objekt-ID 1, Index ID 0, Seiten-ID %S_PGID. Seiten-ID im Seitenheader = %S_PGID.
Obwohl Fehler 2501 nicht unbedingt auf eine Beschädigung der Datenbank tempdb hindeuten musss, führt er doch dazu, dass die Verkleinerungsoperation fehlschlägt. Andererseits könnte Fehler 8909 ein Hinweis auf eine Beschädigung in der Datenbank tempdb sein. Starten Sie SQL Server neu, um die Datenbank tempdb neu zu erstellen, und bereinigen Sie die Konsistenzfehler. Denken Sie jedoch daran, dass es andere Gründe für Fehlermeldungen zu physischen Beschädigungen von Daten geben könnte wie zum Beispiel Fehler 8909. Zu diesen zählen beispielweise Probleme in Bezug auf das E/A-Subsystem.

Informationsquellen

SQL Server-Onlinedokumentationen; Themen: "DBCC SHRINKFILE"; "DBCC SHRINKDATABASE"

Eigenschaften

Artikel-ID: 307487 - Geändert am: Freitag, 12. Juli 2013 - Version: 6.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-Bit Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Keywords: 
kbsqlsetup kbhowtomaster KB307487
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com