sp_filestream_force_garbage_collection (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

Forza il Garbage Collector di FILESTREAM all'esecuzione, eliminando qualsiasi file FILESTREAM non necessario.

Non è possibile rimuovere un contenitore FILESTREAM finché il Garbage Collector non ha completato la rimozione di tutti i file eliminati all'interno di esso. Il Garbage Collector di FILESTREAM viene eseguito automaticamente. Tuttavia, se è necessario rimuovere un contenitore prima dell'esecuzione del Garbage Collector, è possibile usare sp_filestream_force_garbage_collection per eseguire manualmente il Garbage Collector.

Sintassi

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

Argomenti

[ @dbname = ] 'database_name'
Indica il nome del database in cui eseguire il Garbage Collector.

Nota

@dbname è di tipo sysname. Se viene omesso, verrà considerato il database corrente.

[ @filename = ] 'logical_file_name'
Indica il nome logico del contenitore FILESTREAM in cui eseguire il Garbage Collector. @filename è facoltativo. Se non viene specificato alcun nome file logico, il Garbage Collector pulisce tutti i contenitori FILESTREAM nel database specificato.

Valori del codice restituito

Valore Descrizione
0 Operazione riuscita
1 Operazione non riuscita

Set di risultati

Valore Descrizione
file_name Indica il nome del contenitore FILESTREAM
num_collected_items Indica il numero di elementi FILESTREAM (file/directory) che sono stati sottoposti a Garbage Collection (eliminati) in questo contenitore.
num_marked_for_collection_items Indica il numero di elementi FILESTREAM (file/directory) che sono stati contrassegnati per il Garbage Collection in questo contenitore. Questi elementi non sono ancora stati eliminati, ma possono essere idonei per l'eliminazione dopo la fase di Garbage Collection.
num_unprocessed_items Indica il numero di elementi FILESTREAM (file o directory) idonei che non sono stati elaborati per il Garbage Collection in questo contenitore FILESTREAM. Gli elementi possono non essere elaborati per i vari motivi, tra cui:

File che devono essere bloccati perché non è stato eseguito un checkpoint o backup del log.

File nel modello di recupero FULL o BULK_LOGGED.

È presente una transazione attiva con esecuzione prolungata.

Il processo di lettura log di replica non è stato eseguito. Per altre informazioni, white paper filestream Archiviazione in SQL Server 2008.
last_collected_xact_seqno Restituisce l'ultimo numero di sequenza del file di log (LSN) corrispondente fino a cui i file sono stati sottoposti a Garbage Collection per il contenitore FILESTREAM specificato.

Commenti

Esegue in modo esplicito l'attività Garbage Collector per FILESTREAM per il completamento nel database richiesto (e il contenitore FILESTREAM). I file che non sono più necessari vengono rimossi dal processo di Garbage Collection. Il tempo necessario per il completamento di questa operazione dipende dalle dimensioni dei dati FILESTREAM in tale database o contenitore nonché dalla quantità di attività DML recentemente eseguita sui dati FILESTREAM. Sebbene questa operazione possa essere eseguita con il database in modalità online, ciò potrebbe influire sulle prestazioni del database durante l'esecuzione a causa delle varie attività I/O eseguite dal processo di Garbage Collection.

Nota

Si consiglia di eseguire questa operazione solo quando è necessario e in orario diverso da quello lavorativo.

È possibile eseguire contemporaneamente più chiamate di questa stored procedure solo in contenitori separati o database separati.

A causa di operazioni in due fasi, il stored procedure deve essere eseguito due volte per eliminare effettivamente i file Filestream sottostanti.

Garbage Collection (GC) si basa sul troncamento del log. Pertanto, se i file sono stati eliminati di recente in un database usando il modello di recupero con registrazione completa, vengono eliminati solo dopo che è stato eseguito un backup del log di tali parti del log delle transazioni e la parte del log è contrassegnata come inattiva. In un database che usa il modello di recupero con registrazione con registrazione semplice, si verifica un troncamento del log dopo l'emissione di CHECKPOINT un oggetto sul database.

Autorizzazioni

È richiesta l'appartenenza al ruolo del database db_owner.

Esempio

Negli esempi seguenti viene eseguito il Garbage Collector per i contenitori FILESTREAM nel database FSDB.

A. Specifica di nessun contenitore

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

B. Specifica di un contenitore

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

Vedere anche

FileStream
Tabelle file
DMV per FILESTREAM e tabelle FileTable (Transact-SQL)
Viste del catalogo Filestream e FileTable (Transact-SQL)
sp_kill_filestream_non_transacted_handles (Transact-SQL)