Рекомендации по FILESTREAM

В этом разделе приведены рекомендации по использованию FILESTREAM.

Физическая настройка и поддержка

При использовании томов хранилища FILESTREAM обратите внимание на следующие рекомендации.

  • Отключите короткие имена файлов на компьютерах с FILESTREAM. Короткие имена файлов создаются гораздо дольше. Отключить короткие имена файлов можно с помощью программы Windows fsutil.

  • Регулярно выполняйте дефрагментацию на компьютерах с FILESTREAM.

  • Используйте файловую систему NTFS с кластерами по 64 килобайт. На сжатых томах должна быть файловая система NTFS с кластерами по 4 килобайта.

  • Отключите индексирование на томах FILESTREAM и установите параметр disablelastaccess. Для этого воспользуйтесь программой Windows fsutil.

  • Отключите антивирусное сканирование на томах FILESTREAM, если оно не является необходимым. Если антивирусное сканирование необходимо, не настраивайте политики автоматического удаления зараженных файлов.

  • Настройте уровень отказоустойчивости и производительности RAID в соответствии с требованиями приложения.

Уровень RAID

Производительность записи

Производительность чтения

Отказоустойчивость

Примечания

RAID 5

Нормальная

Нормальная

Высокая

Производительность лучше, чем у диска или JBOD, но хуже, чем у RAID 0 или RAID 5 с чередованием.

RAID 0

Высокая

Высокая

Отсутствует

RAID 5 + чередование

Высокая

Высокая

Высокая

Самый дорогостоящий вариант.

Физическая структура базы данных

При проектировании базы данных FILESTREAM следует учитывать следующие рекомендации.

  • Столбцу FILESTREAM должен соответствовать столбец типа uniqueidentifier ROWGUID. Кроме того, типам таблиц также должен соответствовать уникальный индекс. Как правило, этот индекс не является кластеризованным. Если бизнес-логика базы данных требует использовать кластеризованный индекс, следует убедиться, что значения, которые хранятся в индексе, не являются случайными. Случайные значения приведут к переупорядочению индекса при каждом добавлении или удалении строки в таблице.

  • По соображениям производительности файловые группы и контейнеры FILESTREAM находятся на томах, отличных от тех, где находится операционная система, база данных SQL Server, журнал SQL Server, база данных tempdb или файл подкачки.

  • Управление местом на диске и соответствующие политики не поддерживаются FILESTREAM напрямую. Однако можно управлять местом и применять политики косвенно путем присвоения каждой файловой группы FILESTREAM отдельному тому с последующим применением функций управления данного тома.

Проектирование и реализация приложений

  • При проектировании и реализации приложений, использующих FILESTREAM, примите к сведению следующие рекомендации.

  • Представляйте неинициализированный столбец FILESTREAM с помощью значения NULL, а не 0x. Значение 0x вызовет создание файла, а NULL — нет.

  • Избегайте операций вставки и удаления в таблицах, которые содержат столбцы FILESTREAM, отличные от NULL. Эти операции могут изменять таблицы FILESTREAM, которые используются для сборки мусора. Это может приводить к постепенному снижению производительности приложения.

  • В приложениях, использующих репликацию, следует применять функцию NEWSEQUENTIALID() вместо NEWID(). Функция NEWSEQUENTIALID() создает идентификаторы GUID в этих приложениях эффективнее, чем NEWID().

  • Функции API FILESTREAM предназначены для потокового доступа к данным на платформе Win32. Старайтесь не использовать Transact-SQL для чтения или записи двоичных объектов FILESTREAM, если их размер больше 2 мегабайт. Если необходимо выполнять чтение или запись больших двоичных объектов из Transact-SQL, убедитесь, что данные объекта использованы до того, как открывать такой объект FILESTREAM BLOB из Win32. Неиспользование всех данных Transact-SQL может привести к сбою при открытии или закрытии любого последующего объекта FILESTREAM.

  • Старайтесь не использовать инструкции Transact-SQL, которые обновляют большие двоичные объекты FILESTREAM или прикрепляют к ним данные. Это приводит к буферизации данных таких объектов в базе данных tempdb с последующей передачей в новый физический файл.

  • Старайтесь избегать мелких обновлений больших двоичных объектов FILESTREAM. Каждая такая операция приводит к копированию базовых файлов FILESTREAM. Если приложению приходится прикреплять небольшие двоичные объекты, их следует записывать в столбец varbinary(max), а затем выполнять одиночную операцию записи в большой двоичный объект FILESTREAM, когда число объектов достигнет установленного предела.

  • Старайтесь не получать размер большого количества файлов больших двоичных объектов в приложении. На эту операцию уходит много времени, поскольку размер не хранится в компоненте SQL Server Database Engine. Если необходимо выяснить размер файла большого двоичного объекта, воспользуйтесь функцией Transact-SQL DATALENGTH(), чтобы определить размер объекта, если он закрыт. Функция DATALENGTH() не открывает объект, чтобы определить его размер.

  • Если в приложении используется протокол Message Block1 (SMB1), то для оптимизации производительности данные больших двоичных объектов FILESTREAM должны считываться блоками по 60 килобайт.

См. также

Основные понятия