Fichiers FILESTREAM laissés après la suppression de la ligne

J'ai réussi à configurer FILESTREAM sur mon serveur SQL 2008; cependant, j'ai remarqué que même lorsque j'ai supprimé des lignes contenant des données FILESTREAM, le fichier de données physiques ne semble pas être supprimé.

par le fichier physique, je veux dire le fichier dans le répertoire géré par SQLServer avec un uniqueidentifer comme nom de fichier et non le fichier original ajouté à la base de données.

est-ce que quelqu'un sait si SQLServer supprimera éventuellement le fichier? Si il y a beaucoup de gros fichiers supprimés de la base de données, je m'attends à pouvoir récupérer l'espace rapidement, c'est tout.

17
demandé sur Luke Girvin 2009-10-26 17:06:24

3 réponses

FILESTREAM les données sont soumises au contrôle des transactions et ne sont donc pas supprimées instantanément.

au Lieu de cela, SQL Server exécute un collecteur d'ordures qui purge les vieilles données quand il est sûr qu'il a été finalement supprimé.

documentation:

FILESTREAM la collecte des ordures est une tâche de fond qui est déclenchée par le processus de checkpoint de la base de données. Un point de contrôle est lancé automatiquement lorsque la transaction est suffisante le journal a été généré. Pour plus d'informations, voir SQL Server 2008 Books Online rubrique "CHECKPOINT et la partie Active du Log" (http://msdn.microsoft.com/en-us/library/ms189573.aspx). Compte tenu de cela FILESTREAM les opérations des fichiers sont enregistrées au minimum dans le journal des transactions de la base de données, il peut s'écouler un certain temps avant que le nombre d'enregistrements générés dans le journal des transactions ne déclenche un processus de contrôle et que la collecte des ordures ne se produise. Si cela devient un problème, vous pouvez forcer la collecte des ordures à l'aide de la CHECKPOINTdéclaration.

21
répondu Quassnoi 2009-10-26 14:13:41

utiliser

sp_filestream_force_garbage_collection

malheureusement cela ne fonctionne que > = SQL Server 2012

13
répondu Michael Sander 2014-12-03 14:08:31

DELETE FROM tbl_XXX DECLARE @test CHECKPOINT @test = 0

exécutez ceci dans votre serveur sql et Vous pouvez observer le fichier se faire supprimé du système de fichiers..

vous pouvez définir le nombre de minutes ou de secondes pour attendre que le collecteur de déchets nettoie les fichiers du système de fichiers après avoir effectué l'opération de suppression.

Merci

haranath

1
répondu Haranath 2010-02-22 10:46:18