Шифрование
Данные FILESTREAM нельзя шифровать с помощью методов шифрования SQL Server.
Если включено прозрачное шифрование данных, то данные FILESTREAM не шифруются.
Отказоустойчивая кластеризация
FILESTREAM полностью совместим с отказоустойчивыми кластерами. На всех узлах кластера необходимо включить поддержку FILESTREAM на уровне Windows, а контейнеры FILESTREAM разместить в хранилище общего доступа, чтобы эти данные были доступны для всех узлов. Дополнительные сведения см. в разделе электронной документации по SQL Server 2008:
«Как установить FILESTREAM в кластере отработки отказа» (http://msdn. microsoft. com/
ru-ru/library/cc645886.aspx).
Полнотекстовый
Полнотекстовое индексирование обрабатывает столбцы FILESTREAM таким же образом,
как и столбцы типа varbinary (max). Таблица должна иметь дополнительный столбец, в котором содержится расширение имени файла для данных больших двоичных объектов, сохраненных
в столбце FILESTREAM.
Моментальные снимки базы данных
SQL Server не поддерживает моментальные снимки базы данных для контейнеров данных FILESTREAM. Если файл данных FILESTREAM задействован в предложении CREATE DATABASE ON, то эта инструкция завершится ошибкой.
Если база данных содержит данные FILESTREAM, то по-прежнему можно создать моментальный снимок базы данных обычных файловых групп. В этом случае выдается предупреждающее сообщение и файловые группы FILESTREAM будут отмечены в моментальном снимке базы данных как «вне сети». Запросы будут работать правильно с моментальным снимком базы данных, если не предпринимается попытки доступа к данным FILESTREAM. В противном случае возникнет ошибка.
Невозможно восстановить базу данных до моментального снимка, если база данных содержит данные FILESTREAM, поскольку не существует способа определить состояние данных FILESTREAM в момент времени, представленный моментальным снимком базы данных.
Представления, индексы, статистика, триггеры и ограничения
Столбцы FILESTREAM не могут быть частью ключа индекса или указаны как столбец INCLUDE
в некластеризованном индексе. Можно определить вычисляемый столбец, который ссылается
на столбец FILESTREAM, но вычисляемый столбец не может быть индексирован.
Невозможно создать статистику для столбца FILESTREAM.
Ограничения PRIMARY KEY, FOREIGN KEY и UNIQUE не могут быть созданы на основе столбцов FILESTREAM.
Индексированные представления не могут содержать столбцы FILESTREAM, однако это возможно для неиндексированных представлений.
Триггеры INSTEAD OF не могут быть определены для таблиц, содержащих столбцы FILESTREAM.
Уровни изоляции
Если доступ к данным FILESTREAM осуществляется через Win32 API, то поддерживается только уровень изоляции READ COMMITTED. Доступ через Transact-SQL также обеспечивает уровень изоляции REPEATABLE READ и сериализуемые уровни изоляции. Кроме того, при доступе через Transact-SQL «грязное» считывание разрешено через уровень изоляции READ UNCOMMITTED или указание запроса NOLOCK, но такой доступ не отображает обновления откатом незавершенных данных FILESTREAM.
Резервное копирование и восстановление
FILESTREAM работает со всеми моделями восстановления и всеми формами резервного копирования и восстановления (журнал, полное и разностное резервное копирование). В случае сбоя, если указан параметр CONTINUE_AFTER_ERROR для параметра BACKUP или RESTORE, данные FILESTREAM невозможно восстановить без потери данных (аналогично восстановлению обычных данных, если задан параметр CONTINUE_AFTER_ERROR).
Безопасность
Если необходим доступ к данным FILESTREAM, то экземпляр SQL Server должен быть настроен для встроенной безопасности Win32.
Доставка журналов
Доставка журналов поддерживает FILESTREAM. Как на сервере-источнике, так и на сервере-получателе должна быть запущена версия SQL Server 2008 или более поздняя версия, а также должен быть включен компонент FILESTREAM на уровне Windows.
SQL Server Express
SQL Server Express поддерживает FILESTREAM. Ограничение размера базы данных в 4 ГБ не включает контейнер данных FILESTREAM.
Но если данные FILESTREAM пересылаются между компонентом и экземпляром SQL Server Express с помощью компонента Service Broker, то необходимо проявлять осторожность, так как компонент Service Broker не поддерживает хранение данных в FILESTREAM в очередях передачи или назначения. Это означает, что при создании какой-либо очереди может быть достигнут предельный размер базы данных 4 ГБ.
В этом случае можно использовать схему, в которой диалог компонента Service Broker передает уведомления о необходимости отправки или получения данных FILESTREAM. Затем выполняется собственно передача данных FILESTREAM через удаленный доступ к общему ресурсу FILESTREAM контейнера данных FILESTREAM экземпляра SQL Server Express.
Настройка и тестирование производительности
При настройке рабочей нагрузки FILESTREAM необходимо учитывать ряд важных факторов.
· Убедитесь, что оборудование для работы FILESTREAM настроено правильно.
· Убедитесь, что отключено формирование имен в формате 8.3 в файловой системе NTFS.
· Убедитесь, что отключено отслеживание времени последнего доступа в файловой
системе NTFS.
· Убедитесь, что контейнер данных FILESTREAM находится не на фрагментированном томе.
· Убедитесь, что размер больших двоичных данных подходит для хранения в FILESTREAM.
· Убедитесь, что контейнеры данных FILESTREAM имеют собственные, выделенные тома.
Важно указать размер буфера, используемый протоколом SMB для буферизации операции считывания данных FILESTREAM. Во время тестирования с ОС Windows Server® 2003 больший размер буфера обычно обеспечивает более высокую пропускную способность; размеры буфера кратны величине примерно 60 КБ. В других операционных системах буферы более крупных размеров могут оказаться более эффективными.
Существуют дополнительные факторы, которые следует учитывать при сравнении рабочей нагрузки FILESTREAM с другими вариантами хранения (после настройки рабочей нагрузки FILESTREAM).
· Убедитесь, что оборудование хранения и уровень RAID одинаковы для обоих.
· Убедитесь, что параметр сжатия тома одинаков для обоих.
· Учтите, выполняет ли FILESTREAM сквозную запись в зависимости от используемого
API и указанных параметров.
Вопросы миграции данных
Распространенный сценарий применения SQL Server 2008 — перенос существующих данных больших двоичных объектов в хранилище FILESTREAM. Описание полного набора средств или кода для выполнения таких переносов выходит за рамки настоящего технического документа, однако ниже приводится простой рабочий процесс.
· Обратите внимание на размеры данных при использовании FILESTREAM и убедитесь,
что их средние значения приемлемы для хранилища FILESTREAM.
· Просмотрите доступные сведения о сочетаниях и ограничениях компонентов, чтобы убедиться в соответствии хранилища FILESTREAM всем другим требованиям приложения.
· Следуйте инструкциям в приведенном выше разделе «Настройка производительности
и рекомендации по проведению тестов производительности».
· Убедитесь, что экземпляр SQL Server использует встроенную подсистему безопасности,
а FILESTREAM включен на уровнях Windows и SQL Server.
· Убедитесь, что в расположении контейнера данных FILESTREAM достаточно места на диске для хранения перенесенных данных больших двоичных объектов.
· Создайте необходимые файловые группы FILESTREAM.
· Дублируйте соответствующие схемы таблиц, преобразуя необходимые столбцы больших двоичных объектов для FILESTREAM.
· Перенесите все данные, отличные от данных больших двоичных объектов, в новую схему.
· Перенесите все данные больших двоичных объектов в новые столбцы FILESTREAM.
Рекомендации по использованию FILESTREAM
В этом разделе собраны рекомендации, составленные по результатам использования FILESTREAM во время предварительного внутреннего и открытого тестирования компонента. Однако, как и прочие рекомендации, они являются обобщениями, которые не являются универсальными для любых ситуаций или сценариев. Рекомендации следующие (в произвольном порядке):
· Следует избегать многочисленных малых добавлений к файлу FILESTREAM, так как каждое добавление создает новый файл FILESTREAM. Это может оказаться весьма ресурсоемким для больших файлов FILESTREAM. Если возможно, добавления следует объединить в столбец varbinary (max), а затем при достижении порогового значения размера добавить к столбцу FILESTREAM.
· Для рабочей нагрузки записи, имеющей большое число потоков, попробуйте задать параметр AllocationSize для API OpenSqlFilestream или SqlFilestream. Чем крупнее размер начального выделения, тем ниже будет фрагментация на уровне файловой системы, особенно в сочетании с большим размером кластера NTFS, как описано выше.
· Если файлы FILESTREAM имеют большой размер, избегайте обновлений Transact-SQL, которые будут добавлять данные в начало или конец файла. Данные обычно буферизуются в базе данных tempdb, а затем возвращаются в новый физический файл, что может повлиять на производительность.
· При считывании значений FILESTREAM следует учитывать следующие моменты.
o Если необходимо считать только первые несколько байтов, то попробуйте использовать подстроки.
o Если нужно считывать весь файл, то рассмотрите возможность доступа Win32.
o Если нужно считывать произвольные фрагменты файла, то можно открыть дескриптор файла с помощью SetFilePointer.
o При считывании всего файла установите флажок FILE_SEQUENTIAL_ONLY.
o Используйте размер буфера, кратный 60 КБ (как описано выше).
Размер файла FILESTREAM можно получить без открытия дескриптора файла путем добавления материализованного вычисляемого столбца в таблицу, где будет храниться размер файла FILESTREAM. Вычисляемый столбец обновляется, в то время как файл уже открыт для записи.
Заключение
В этом техническом документе описывается компонент FILESTREAM SQL Server 2008, который обеспечивает хранение и эффективный доступ к данным больших двоичных объектов с использованием SQL Server 2008 и файловой системы NTFS. В заключение будет полезно повторить основные положения технического документа.
Хранилище FILESTREAM не всегда является подходящим решением. На основе проведенных исследований и знаний о работе компонента FILESTREAM можно сделать вывод, что данные больших двоичных объектов размером не менее 1 МБ, доступ
к которым осуществляется через Transact-SQL, лучше всего подходят для хранения
в качестве данных FILESTREAM.
Необходимо уделить внимание обновлению рабочей нагрузки, так как при любом частичном обновлении файла FILESTREAM формируется полная копия файла. Если рабочая нагрузка по обновлению особенно велика, то ее влияние на производительность может оказаться таким, что использование FILESTREAM окажется невыгодным.
Необходимо изучить взаимное влияние компонентов, чтобы развертывание прошло успешно. Например, в SQL Server 2008 RTM зеркальное отображение базы данных несовместимо с использованием данных FILESTREAM, как и любая форма изоляции моментального снимка. Большинство других сочетаний компонентов поддерживаются, однако некоторые из них могут иметь ограничения (например, репликация). В этом техническом документе не представлена исчерпывающая классификация компонентов
и их взаимодействия, поэтому, прежде чем приступать к развертыванию, следует ознакомиться с разделами недавно вышедшей электронной документации по SQL Server, особенно учитывая, что некоторые ограничения, скорее всего, будут устранены в будущих выпусках.
Наконец, если FILESTREAM развернут без правильно настроенных Windows и SQL Server, то, возможно, ожидаемых уровней производительности добиться не удастся. Рекомендации и сведения о конфигурации, приведенные выше, помогут избежать снижения производительности.
Для получения дополнительных сведений см.
http://www. /sqlserver/: веб-сайт SQL Server
http://technet. /ru-ru/sqlserver/: технический центр SQL Server
http://msdn. /ru-ru/sqlserver/: центр разработчиков SQL Server
Помогла ли вам эта статья? Пожалуйста, оставьте свой отзыв. Оцените материал по шкале от 1 (плохо) до 5 (отлично) и обоснуйте свою оценку. Например:
· Вы высоко оценили этот документ из-за наличия подходящих примеров, четких снимков экрана, ясного изложения или по какой-либо другой причине?
· Вы низко оценили степень полезности этого документа из-за плохих примеров, нечетких снимков экрана и неясного изложения?
Ваш отзыв поможет нам повысить качество выпускаемых нами технических документов.
Отправить отзыв
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 |


