sp_filestream_force_garbage_collection (Transact-SQL)

Si applica a:SQL Server

Forza l'esecuzione del Garbage Collector (GC) FILESTREAM, eliminando eventuali file FILESTREAM non necessari.

Un contenitore FILESTREAM non può essere rimosso fino a quando tutti i file eliminati all'interno del contenitore non vengono puliti dal catalogo globale. L'GC FILESTREAM viene eseguito automaticamente. Tuttavia, se è necessario rimuovere un contenitore prima dell'esecuzione del GC, è possibile usare sp_filestream_force_garbage_collection per eseguire manualmente il catalogo globale.

Convenzioni di sintassi Transact-SQL

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 GC.

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

[ @filename = ] 'logical_file_name'

Specifica il nome logico del contenitore FILESTREAM in cui eseguire GC. @filename è facoltativo. Se non viene specificato alcun nome file logico, GC 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 o directory) che sono stati sottoposti a Garbage Collection (eliminati) in questo contenitore.
num_marked_for_collection_items Indica il numero di elementi FILESTREAM (file o directory) contrassegnati per GC in questo contenitore. Questi elementi non sono stati ancora eliminati, ma potrebbero essere idonei per l'eliminazione dopo la fase GC.
num_unprocessed_items Indica il numero di elementi FILESTREAM idonei (file o directory) che non sono stati elaborati per GC in questo contenitore FILESTREAM. Gli elementi possono essere non elaborati per diversi motivi, tra cui:

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

- File nel modello di recupero FULL o BULK_LOGGED.

- È presente una transazione attiva a esecuzione prolungata.

- Il processo di lettura log di replica non è stato eseguito. Per altre informazioni, vedere il 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.

Osservazioni:

Esegue in modo esplicito l'attività di Garbage Collection FILESTREAM per il completamento nel database richiesto (e nel contenitore FILESTREAM). Il processo GC rimuove i file non più necessari. Il tempo necessario per il completamento di questa operazione dipende dalle dimensioni dei dati FILESTREAM in tale database o contenitore e dalla quantità di attività DML che si sono verificate di recente sui dati FILESTREAM. Anche se questa operazione può essere eseguita online con il database, ciò può influire sulle prestazioni del database durante l'esecuzione a causa di varie attività di I/O eseguite dal processo GC.

Nota

È consigliabile eseguire questa operazione solo quando necessario e al di fuori delle normali ore operative.

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

A causa di operazioni in due fasi, la stored procedure deve essere eseguita due volte per eliminare effettivamente i file FILESTREAM sottostanti.

Garbage Collection 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 raccolti solo dopo l'esecuzione di 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 minima, si verifica un troncamento del log dopo l'emissione di un CHECKPOINT oggetto sul database.

Autorizzazioni

Richiede l'appartenenza al ruolo del database db_owner .

Esempi

Negli esempi seguenti viene eseguito il GC per i contenitori FILESTREAM nel fsdb database.

R. Specificare nessun contenitore

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

B. Specificare un contenitore

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