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
sp_filestream_force_garbage_collection
[ @dbname = ] 'database_name'
[ , [ @filename = ] 'logical_file_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.
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.
Wert | Beschreibung |
---|---|
0 |
Vorgang war erfolgreich. |
1 |
Fehler beim Vorgang. |
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. |
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.
Erfordert die Mitgliedschaft in der db_owner-Datenbankrolle .
Die folgenden Beispiele führen die GC für FILESTREAM-Container in der fsdb
Datenbank aus.
USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb';
USE fsdb;
GO
EXEC sp_filestream_force_garbage_collection @dbname = N'fsdb',
@filename = N'FSContainer';