Verkleinern einer Datei

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

In diesem Artikel erfahren Sie, wie Sie eine Daten- oder Protokolldatei in SQL Server mithilfe von SQL Server Management Studio oder Transact-SQL verkleinern.

Mit dem Verkleinern von Datendateien wird Platz gewonnen, indem Datenseiten vom Ende der Datei an nicht belegten Platz weiter am Dateianfang verschoben werden. Wurde am Ende der Datei ausreichend Platz geschaffen, kann die Zuordnung der Datenseiten am Ende der Datei aufgehoben und die Datenseiten können ins Dateisystem zurückgegeben werden.

Begrenzungen

  • Die primäre Datendatei kann nicht kleiner als die Größe der primären Datei in der model Datenbank werden.

Empfehlungen

  • Ein Verkleinerungsvorgang ist am effektivsten nach einem Vorgang, durch den eine große Menge nicht verwendeter Speicherplatz bereitgestellt wird, z. B. nach einer umfangreichen DELETE-Anweisung oder dem Abschneiden bzw. Löschen einer Tabelle.

  • Die meisten Datenbanken erfordern verfügbaren freien Speicherplatz für die normalen alltäglichen Vorgänge. Wenn Sie eine Datenbankdatei wiederholt verkleinern und feststellen, dass die Datenbankgröße wieder zunimmt, deutet das darauf hin, dass der freie Speicherplatz für normale Vorgänge benötigt wird. In diesem Fall ist das Verkleinern der Datenbankdatei vergeblich. Ereignisse für automatisches Wachstum, die zum Vergrößern der Datenbankdatei erforderlich sind, beeinträchtigen die Leistung.

  • Die zum Verkleinern einer Datei verschobenen Daten können an beliebigen freien Platz in der Datei verschoben werden. Dies führt zur Indexfragmentierung und kann die Leistung von Abfragen, die einen Bereich des Indexes suchen, verlangsamen. Zur Vermeidung von Fragmentierung sollten die Dateiindizes nach der Verkleinerung neu erstellt werden.

  • Legen Sie die Datenbankoption AUTO_SHRINK nicht auf ON fest, es sei denn, besondere Anforderungen erfordern dies.

Hinweise

Aktuelle Verkleinerungsvorgänge können andere Abfragen in der Datenbank blockieren und können von Abfragen blockiert werden, die bereits ausgeführt werden. Ab SQL Server 2022 (16.x) verfügen Verkleinerungsvorgänge für Dateien über eine WAIT_AT_LOW_PRIORITY-Option. Dieses Feature ist eine neue zusätzliche Option für DBCC SHRINKDATABASE und DBCC SHRINKFILE. Kann ein neuer Verkleinerungsvorgang im WAIT_AT_LOW_PRIORITY-Modus die erforderlichen Sperren aufgrund einer bereits ausgeführten Abfrage mit langer Ausführungszeit nicht abrufen, wird der Verkleinerungsvorgang nach einer Minute mit einem Timeout abgebrochen und ohne Meldung beendet, damit andere Abfragen nicht blockiert werden. WAIT_AT_LOW_PRIORITY gilt für Datendateien (.mdf & ndf). Sie gilt nicht für Transaktionsprotokolldateien. Weitere Informationen finden Sie unter DBCC SHRINKFILE.

Berechtigungen

Erfordert die Mitgliedschaft in der festen Serverrolle sysadmin oder der festen Datenbankrolle db_owner .

Verwenden von SQL Server Management Studio (SSMS)

Eine Daten- oder Protokolldatei mit SSMS verkleinern

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz der SQL Server-Datenbank-Engine her, und erweitern Sie anschließend diese Instanz.

  2. Erweitern Sie Datenbanken , und klicken Sie dann mit der rechten Maustaste auf die Datenbank, die Sie verkleinern möchten.

  3. Zeigen Sie mit dem Mauszeiger auf Aufgaben, anschließend auf Verkleinern, und klicken Sie dann auf Dateien.

    Datenbank
    Zeigt den Namen der ausgewählten -Datenbank an.

    Dateityp
    Wählen Sie den Dateityp für die Datei aus. Die verfügbaren Auswahlmöglichkeiten für den Dateityp sind Daten und Protokoll . Die Standardauswahl ist Daten. Bei der Auswahl eines anderen Dateigruppentyps wird die Auswahl in den anderen Feldern entsprechend geändert.

    Dateigruppe
    Wählen Sie eine Dateigruppe aus der Liste der Dateigruppen aus, die dem oben genannten Dateityp zugewiesen sind. Bei der Auswahl einer anderen Dateigruppe wird die Auswahl in den anderen Feldern entsprechend geändert.

    Dateiname
    Wählen Sie eine Datei aus der Liste der verfügbaren Dateien aus, die der ausgewählten Dateigruppe und dem Dateityp entspricht.

    Location
    Zeigt den vollständigen Pfad zur aktuell ausgewählten Datei an. Dieser Pfad kann nicht bearbeitet, aber in die Zwischenablage kopiert werden.

    Aktuell zugeordneter Speicherplatz
    Zeigt bei Datendateien den aktuell zugeordneten Speicherplatz an. Bei Protokolldateien wird der aktuell zugeordnete Speicherplatz angezeigt, der auf der Basis der Ausgabe von DBCC SQLPERF(LOGSPACE) berechnet wurde.

    Verfügbarer freier Speicherplatz
    Zeigt bei Datendateien den aktuell verfügbaren freien Speicherplatz an, der auf der Basis der Ausgabe von DBCC SHOWFILESTATS(fileid) berechnet wurde. Bei Protokolldateien wird der aktuell verfügbare freie Speicherplatz angezeigt, der auf der Basis der Ausgabe von DBCC SQLPERF(LOGSPACE) berechnet wurde.

    Nicht verwendeten Speicherplatz freigeben
    Bewirkt, dass ungenutzter Speicherplatz in den Dateien an das Betriebssystem freigegeben und die Datei auf die zuletzt zugeordnete Größe verkleinert wird, wodurch die Dateigröße ohne Verschieben von Daten reduziert wird. Es wird nicht versucht, verfügbaren Seiten Zeilen erneut zuzuordnen.

    Seiten vor dem Freigeben von nicht verwendetem Speicherplatz neu organisieren
    Entspricht dem Ausführen von DBCC SHRINKFILE zur Angabe der Zieldateigröße. Wenn diese Option ausgewählt ist, muss der Benutzer eine Zieldateigröße im Feld Datei verkleinern auf angeben.

    Datei verkleinern auf
    Gibt die Zieldateigröße für den Verkleinerungsvorgang an. Die Größe kann nicht kleiner als der aktuell zugeordnete Speicherplatz und nicht größer als die Summe der Blöcke sein, die der Datei zugeordnet sind. Wenn ein Wert außerhalb der Grenzen eingegeben wird, wird der entsprechend nähere Grenzwert wiederhergestellt, sobald der Fokus geändert oder auf eine der Schaltflächen auf der Symbolleiste ausgewählt wird.

    Datei durch Migrieren ihrer Daten zu anderen Dateien in der gleichen Dateigruppe leeren
    Migriert alle Daten aus der angegebenen Datei. Diese Option ermöglicht das Löschen der Datei mit der ALTER DATABASE-Anweisung. Sie entspricht dem Ausführen von DBCC SHRINKFILE mit der Option EMPTYFILE. EMPTYFILE wird in Azure SQL-Datenbank oder Azure SQL-Datenbank Hyperscale nicht unterstützt.

  4. Wählen Sie den Dateityp und den Dateinamen aus.

  5. Aktivieren Sie optional das Kontrollkästchen Nicht verwendeten Speicherplatz freigeben .

    Wenn diese Option ausgewählt wird, wird ungenutzter Speicherplatz in der Datei für das Betriebssystem freigegeben und die Datei auf den zuletzt zugeordneten Block verkleinert. Durch diesen Vorgang wird die Dateigröße ohne Verschieben von Daten reduziert.

  6. Aktivieren Sie optional das Kontrollkästchen Dateien vor dem Freigeben von nicht belegtem Speicherplatz neu organisieren . Wenn dieses Kontrollkästchen aktiviert ist, muss der Wert Datei verkleinern auf angegeben werden. Standardmäßig ist diese Option deaktiviert.

    Wenn diese Option ausgewählt wird, wird ungenutzter Speicherplatz in der Datei für das Betriebssystem freigegeben, und es wird versucht, Zeilen in nicht zugeordnete Seiten zu verschieben.

  7. Geben Sie optional den maximalen Prozentsatz an freiem Speicherplatz ein, der in der Datenbankdatei verbleiben soll, nachdem die Datenbank verkleinert wurde. Der zulässige Wert liegt zwischen 0 und 99. Diese Option ist nur verfügbar, wenn Dateien vor dem Freigeben von nicht belegtem Speicherplatz neu organisieren aktiviert ist.

  8. Aktivieren Sie optional das Kontrollkästchen Datei durch Migrieren ihrer Daten zu anderen Dateien in der gleichen Dateigruppe leeren .

    Wenn Sie diese Option aktivieren, werden alle Daten aus der angegebenen Datei in andere Dateien in der Dateigruppe verschoben. Die leere Datei kann anschließend gelöscht werden. Diese Option entspricht dem Ausführen von DBCC SHRINKFILE mit der EMPTYFILE-Option.

  9. Wählen Sie OK aus.

Verwenden von Transact-SQL

Eine Daten- oder Protokolldatei mit Transact-SQL verkleinern

  1. Stellen Sie eine Verbindung mit dem Datenbank-Engineher.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das folgende Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen. In diesem Beispiel wird DBCC SHRINKFILE verwendet, um die Größe einer Datendatei mit dem Namen DataFile1 in der Datenbank UserDB auf 7 MB zu verkleinern.

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO