19.2.26

Опровержение мифов о FILESTREAM

Автор: Paul Randal, A SQL Server DBA myth a day: (18/30) FILESTREAM storage, garbage collection, and more

Данные FILESTREAM не могут храниться удалённо

Контейнер данных FILESTREAM (придуманное название для структуры каталогов NTFS, в которой хранятся данные FILESTREAM) должен подчиняться тем же правилам локальности, что и обычные файлы данных и журнала базы данных – т.е. он должен быть размещён на хранилище, 'локальном' для сервера Windows, на котором работает SQL Server. К данным FILESTREAM можно получить доступ, используя UNC-путь, при условии, что клиент связался с локальным SQL Server и получил необходимый контекст транзакции для использования при открытии файла FILESTREAM.

Контейнеры данных FILESTREAM не могут быть вложенными

Два контейнера данных FILESTREAM для одной базы данных могут совместно использовать корневой каталог, но контейнеры данных не могут быть вложенными, и контейнеры данных из разных баз данных не могут совместно использовать каталог. Я опубликовал в блоге пример скрипта, демонстрирующий это, в статье Заблуждения относительно хранилища FILESTREAM.

Частичные обновления файлов FILESTREAM не поддерживаются

Любое обновление файла FILESTREAM создаёт совершенно новый файл FILESTREAM, который будет подхвачен резервными копиями журнала. Вот почему FILESTREAM нельзя использовать с зеркальным отображением базы данных – объём данных, передаваемых на зеркальный сервер, был бы запредельным. Будем надеяться, что будущая версия SQL Server реализует механизм различий, который позволит выполнять частичные обновления и, следовательно, обеспечит совместимость с зеркальным отображением базы данных.

Сборка мусора FILESTREAM не происходит мгновенно

Сборка мусора происходит, когда файл FILESTREAM больше не требуется (обычно это означает, что он был скопирован резервной копией журнала) И происходит дальнейшая контрольная точка. Это очень неочевидно и заставляет многих людей думать, что сборка мусора FILESTREAM у них не работает. Я подробно объяснил это в своей статье Сборка мусора в FILESTREAM.

Каталоги и имена файлов FILESTREAM возможно идентифицировать

В кажущемся безумии GUID и странных имён файлов есть метод. Фактические имена файлов FILESTREAM являются символьным представлением LSN записи журнала, которая описывала создание файла. Имена каталогов таблиц и столбцов — это GUID, которые можно получить из системных таблиц. (Если быть совсем точным, каталоги таблиц на самом деле являются каталогами 'rowset' с точки зрения хранилища данных – где rowset равен части таблицы в одном разделе секционированной таблицы).

У меня есть две статьи в блоге, которые раскрывают различные имена и системные таблицы и показывают, как разобраться, что есть что:


Комментариев нет:

Отправить комментарий