2009-10-26 18 views
17

He configurado satisfactoriamente FILESTREAM en mi servidor SQL 2008; sin embargo, he notado que incluso cuando eliminé las filas que contenían datos de FILESTREAM, el archivo de datos físicos no parece borrarse.Archivos FILESTREAM que se quedan después de la fila eliminada

Por el archivo físico, quiero decir el archivo en el directorio administrado de SQLServer con un identificador único como el nombre de archivo y no el archivo original agregado a la base de datos.

¿Alguien sabe si SQLServer eliminará el archivo eventualmente? Si hay una gran cantidad de archivos grandes eliminados de la base de datos, espero poder reclamar el espacio rápidamente, eso es todo.

Gracias,

Dale datos

Respuesta

20

FILESTREAM está sujeto a control de transacciones y por lo tanto no se elimina instantáneamente.

En su lugar, SQL Server ejecuta un recolector de basura que purga los datos antiguos cuando está seguro de que finalmente se eliminaron.

Desde el documentation:

FILESTREAM recolección de basura es una tarea de fondo que se desencadena por el proceso de punto de control de la base de datos. Un punto de control se ejecuta automáticamente cuando se ha generado suficiente registro de transacciones. Para obtener más información, consulte el SQL Server 2008 Books Online tema "CHECKPOINT y la parte activa del registro" (http://msdn.microsoft.com/en-us/library/ms189573.aspx). Dado que las operaciones de archivos FILESTREAM se registran mínimamente en el registro de transacciones de la base de datos, puede pasar un tiempo antes de que el número de registros de registro de transacciones genere un proceso de punto de control y se produzca la recolección de elementos no utilizados. Si esto se convierte en un problema, puede forzar la recolección de basura utilizando la instrucción CHECKPOINT.

2

Eliminar en tbl_XXX DECLARE @test PUNTO DE CONTROL @test = 0

Ejecutar este en su servidor SQL y se puede observar el archivo de ser eliminado del sistema de archivos también ..

Puede establecer la la cantidad de minutos o segundos que debe esperar el recolector de basura para limpiar los archivos del sistema de archivos después de realizar la operación de eliminación.

Gracias

Haranath

+0

fácil: BORRAR DE PUNTO DE CONTROL mesa – DanDan

+1

@DanDan Sé que esto es como hace años pero solo quiero advertir a otros usuarios sobre el peligro de borrar accidentalmente todas las filas en su tabla cuando el comando 'DELETE FROM table CHECKPOINT' es usado. Lo intenté y eliminó todas las filas de mi tabla. Afortunadamente, mi tabla solo contiene datos de muestra. – corix010

13

uso

sp_filestream_force_garbage_collection 

lamentablemente esto sólo funciona> = SQL Server 2012

+2

FYI - Esto es solo para SQL 2012 – NotMe

+0

Sí, gracias. Yo también necesito eso. ¡Una buena razón para actualizar a 2012! – LaBracca

+0

Intenté esto en mi SQL Server 2012 Express local y parece que no funciona. – corix010

Cuestiones relacionadas