sp_filestream_force_garbage_collection (Transact-SQL)

S'applique à : SQL Server

Force le garbage collector FILESTREAM (GC) à s’exécuter, en supprimant les fichiers FILESTREAM inutiles.

Un conteneur FILESTREAM ne peut pas être supprimé tant que tous les fichiers supprimés ne sont pas nettoyés par le GC. FileSTREAM GC s’exécute automatiquement. Toutefois, si vous devez supprimer un conteneur avant l’exécution du GC, vous pouvez l’utiliser sp_filestream_force_garbage_collection pour exécuter le GC manuellement.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @dbname = ] 'database_name'

Indique le nom de la base de données sur lequel exécuter le GC.

@dbname est sysname. En l'absence de spécification, c'est la base de données actuelle qui est utilisée.

[ @filename = ] 'logical_file_name'

Spécifie le nom logique du conteneur FILESTREAM sur lequel exécuter le GC. @filename est facultatif. Si aucun nom de fichier logique n’est spécifié, le GC nettoie tous les conteneurs FILESTREAM dans la base de données spécifiée.

Valeurs des codes de retour

Valeur Description
0 Réussite de l'opération
1 Échec de l'opération

Jeu de résultats

Valeur Description
file_name Indique le nom de conteneur FILESTREAM
num_collected_items Indique le nombre d’éléments FILESTREAM (fichiers ou répertoires) qui ont été collectés (supprimés) dans ce conteneur.
num_marked_for_collection_items Indique le nombre d’éléments FILESTREAM (fichiers ou répertoires) marqués pour GC dans ce conteneur. Ces éléments n’ont pas encore été supprimés, mais peuvent être éligibles à la suppression après la phase GC.
num_unprocessed_items Indique le nombre d’éléments FILESTREAM éligibles (fichiers ou répertoires) qui n’ont pas été traités pour GC dans ce conteneur FILESTREAM. Les éléments peuvent être non traités pour différentes raisons, notamment :

- Fichiers qui doivent être épinglés parce qu’une sauvegarde de journal ou un point de contrôle n’a pas été effectué.

- Fichiers dans le modèle de récupération FULL ou BULK_LOGGED.

- Il existe une transaction active longue.

- Le travail du lecteur du journal de réplication n’a pas été exécuté. Pour plus d’informations, consultez le livre blanc FILESTREAM Storage dans SQL Server 2008 .
last_collected_xact_seqno Retourne le dernier numéro séquentiel dans le journal correspondant (LSN) jusqu'aux fichiers récupérés par le garbage collector pour le conteneur FILESTREAM spécifié.

Notes

Exécute explicitement la tâche de garbage collection FILESTREAM pour terminer la base de données demandée (et le conteneur FILESTREAM). Le processus GC supprime les fichiers qui ne sont plus nécessaires. Le temps nécessaire à cette opération dépend de la taille des données FILESTREAM dans cette base de données ou conteneur, ainsi que de la quantité d’activité DML qui s’est produite récemment sur les données FILESTREAM. Bien que cette opération puisse être exécutée avec la base de données en ligne, cela peut affecter les performances de la base de données pendant son exécution en raison de diverses activités d’E/S effectuées par le processus GC.

Remarque

Il est recommandé d’exécuter cette opération uniquement si nécessaire et en dehors des heures d’opération habituelles.

Plusieurs appels de cette procédure stockée peuvent être exécutés simultanément uniquement sur des conteneurs distincts ou des bases de données distinctes.

En raison d’opérations en deux phases, la procédure stockée doit être exécutée deux fois pour supprimer réellement les fichiers FILESTREAM sous-jacents.

Le garbage collection s’appuie sur la troncation des journaux. Par conséquent, si des fichiers ont été supprimés récemment sur une base de données à l’aide du modèle de récupération complète, ils sont collectés à la mémoire uniquement une fois qu’une sauvegarde de journal de ces parties du journal des transactions est effectuée et que la partie journal est marquée inactive. Sur une base de données à l’aide du modèle de récupération simple, une troncation de journal se produit une fois qu’une CHECKPOINT base de données a été émise sur la base de données.

autorisations

Nécessite l’appartenance au rôle de base de données db_owner .

Exemples

Les exemples suivants exécutent le GC pour les conteneurs FILESTREAM dans la fsdb base de données.

A. Spécifier aucun conteneur

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

B. Spécifier un conteneur

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