Особенность работы FileStream

Источник: dvprofessionals
Михаил Захаров

Обнаружена следующая особенность работы FileStream. Если удалить большой файл, который был загружен в DocsVision и размещен в FileStream, то папка FileStream на диске не уменьшается и имеет тот же размер, что и до удаления.

При изучении поведения были найдены 2 статьи:
http://www.itcommunity.ru/blogs/rsug/archive/2009/6/3.aspx
http://www.sqlskills.com/BLOGS/PAUL/post/FILESTREAM-garbage-collection.aspx

Это особенность работы технологии FileStream в SQL Server 2008. Файлы из хранилища удаляются не сразу, а в определенный момент. За удаление файла отвечает т.н. "сборщик мусора".

Сборщик мусора срабатывает при создании контрольных точек (операция CHECKPOINT) http://msdn.microsoft.com/ru-ru/library/ms188748.aspx. Которая в свою очередь вызывается, либо вручную, либо при операциях бекапа (базы или лога).
Т.о. при активной работе с базой (когда количество транзакций велико) сборщик мусора должен срабатывать автоматически через некоторый период и уменьшать размер хранилища.

На тестовой базе можно проверить самостоятельно выполнив команду бекапа лога транзакций и создания контрольной точки:

USE master
EXEC sp_addumpdevice 'disk', 'MyDBLog', 'c:\Temp\Log.bak'
BACKUP LOG MyBase to MyDBLog
CHECKPOINT

На тестовых базах, количество транзакций невелико и эту операцию (backup-checkpoint) придется выполнить несколько раз (на моей пришлось делать 20).


Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=21084