Подтвердить что ты не робот

Файлы FILESTREAM остаются после удаленной строки

Я успешно настроил FILESTREAM на моем сервере SQL 2008; однако я заметил, что даже когда я удалил строки, содержащие данные FILESTREAM, файл физических данных, похоже, не удаляется.

По физическому файлу я имею в виду файл в управляемом каталоге SQLServer с уникальным идентификатором как имя файла, а не исходный файл, добавленный в базу данных.

Кто-нибудь знает, удастся ли SQLServer удалить файл? Если из dbase удалено большое количество больших файлов, я бы ожидал, что они смогут быстро освободить место.

Спасибо,

Дейл

4b9b3361

Ответ 1

FILESTREAM данные подлежат контролю транзакций и поэтому не удаляются мгновенно.

Вместо этого SQL Server запускает сборщик мусора, который очищает старые данные, когда он уверен, что он был в конечном счете удален.

Из документация:

FILESTREAM сбор мусора - это фоновая задача, которая запускается процессом контрольной точки базы данных. Контрольная точка автоматически запускается при создании журнала транзакций. Для получения дополнительной информации см. Раздел SQL Server 2008 Books Online "CHECKPOINT и активная часть журнала" (http://msdn.microsoft.com/en-us/library/ms189573.aspx). Учитывая, что операции с файлами FILESTREAM минимально регистрируются в журнале транзакций баз данных, может потребоваться некоторое время, прежде чем количество созданных записей журнала транзакций инициирует процесс контрольной точки и сбор мусора. Если это становится проблемой, вы можете принудительно собрать сбор мусора с помощью инструкции CHECKPOINT.

Ответ 2

использование

sp_filestream_force_garbage_collection

К сожалению, это работает только >= SQL Server 2012

Ответ 3

УДАЛИТЬ ИЗ tbl_XXX DECLARE @test CHECKPOINT @test = 0

Запустите это на своем сервере sql и вы также можете наблюдать, как файл удаляется из файловой системы.

Вы можете установить количество минут или секунд, чтобы дождаться, когда сборщик мусора очистит файлы из файловой системы после выполнения операции удаления.

Спасибо

haranath