Freigeben über


sp_filestream_force_garbage_collection (Transact-SQL)

Gilt für: SQL Server

Erzwingt die Ausführung des FILESTREAM Garbage Collector (GC) und Löscht alle nicht benötigten FILESTREAM-Dateien.

Ein FILESTREAM-Container kann erst entfernt werden, wenn alle darin enthaltenen gelöschten Dateien von der GC bereinigt werden. Die FILESTREAM GC wird automatisch ausgeführt. Wenn Sie jedoch einen Container entfernen müssen, bevor die GC ausgeführt wird, können sp_filestream_force_garbage_collection Sie die GC manuell ausführen.

Transact-SQL-Syntaxkonventionen

Syntax

sp_filestream_force_garbage_collection
    [ @dbname = ] 'database_name'
    [ , [ @filename = ] 'logical_file_name' ]
[ ; ]

Argumente

[ @dbname = ] 'database_name'

Gibt den Namen der Datenbank an, auf der die GC ausgeführt werden soll.

@dbname ist "sysname". Fehlt die Angabe, wird die aktuelle Datenbank zugrunde gelegt.

[ @filename = ] 'logical_file_name'

Gibt den logischen Namen des FILESTREAM-Containers an, auf dem die GC ausgeführt werden soll. @filename ist optional. Wenn kein logischer Dateiname angegeben wird, bereinigt die GC alle FILESTREAM-Container in der angegebenen Datenbank.

Rückgabecodewerte

Wert Beschreibung
0 Vorgang war erfolgreich.
1 Fehler beim Vorgang.

Resultset

Wert Beschreibung
file_name Gibt den Namen des FILESTREAM-Containers an
num_collected_items Gibt die Anzahl der FILESTREAM-Elemente (Dateien oder Verzeichnisse) an, die in diesem Container garbage collected (deleted) wurden.
num_marked_for_collection_items Gibt die Anzahl der FILESTREAM-Elemente (Dateien oder Verzeichnisse) an, die in diesem Container für GC markiert wurden. Diese Elemente wurden noch nicht gelöscht, können aber möglicherweise nach der GC-Phase gelöscht werden.
num_unprocessed_items Gibt die Anzahl berechtigter FILESTREAM-Elemente (Dateien oder Verzeichnisse) an, die in diesem FILESTREAM-Container nicht für GC verarbeitet wurden. Elemente können aus verschiedenen Gründen nicht verarbeitet werden, darunter:

– Dateien, die angeheftet werden müssen, weil keine Protokollsicherung oder ein Prüfpunkt erstellt wurde.

- Dateien im VOLLSTÄNDIGen oder BULK_LOGGED Wiederherstellungsmodell.

– Es gibt eine lange aktive Transaktion.

- Der Replikationsprotokollleserauftrag wurde nicht ausgeführt. Weitere Informationen finden Sie im Whitepaper FILESTREAM Storage in SQL Server 2008 .
last_collected_xact_seqno Gibt die letzte Sequenznummer (LSN) für den entsprechenden FILESTREAM-Container an, bis zu der die Dateien von der Garbage Collection erfasst wurden.

Hinweise

Führt explizit den Task FILESTREAM Garbage Collection aus, um den Abschluss der angeforderten Datenbank (und des FILESTREAM-Containers) auszuführen. Der GC-Prozess entfernt Dateien, die nicht mehr benötigt werden. Die für diesen Vorgang erforderliche Zeit hängt von der Größe der FILESTREAM-Daten in dieser Datenbank oder dem Container und der Menge der DML-Aktivität ab, die kürzlich in den FILESTREAM-Daten aufgetreten sind. Obwohl dieser Vorgang online mit der Datenbank ausgeführt werden kann, kann sich dies auf die Leistung der Datenbank während der Ausführung auswirken, da verschiedene E/A-Aktivitäten durch den GC-Prozess durchgeführt werden.

Hinweis

Es wird empfohlen, diesen Vorgang nur bei Bedarf und außerhalb der üblichen Betriebszeiten auszuführen.

Mehrere Aufrufe dieser gespeicherten Prozedur können nur in separaten Containern oder separaten Datenbanken gleichzeitig ausgeführt werden.

Aufgrund von zwei Phasenvorgängen sollte die gespeicherte Prozedur zweimal ausgeführt werden, um zugrunde liegende FILESTREAM-Dateien tatsächlich zu löschen.

Die Garbage Collection basiert auf dem Protokollabschneiden. Wenn Dateien daher kürzlich in einer Datenbank mithilfe des vollständigen Wiederherstellungsmodells gelöscht wurden, werden sie erst nach der Protokollsicherung dieser Transaktionsprotokollteile und der Protokollteil als inaktiv markiert. In einer Datenbank, die das einfache Wiederherstellungsmodell verwendet, tritt ein Protokollabkürzung auf, nachdem eine CHECKPOINT für die Datenbank ausgestellt wurde.

Berechtigungen

Erfordert die Mitgliedschaft in der db_owner-Datenbankrolle .

Beispiele

Die folgenden Beispiele führen die GC für FILESTREAM-Container in der fsdb Datenbank aus.

A. Keinen Container angeben

USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb';

B. Angeben eines Containers

USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb',
    @filename = N'FSContainer';