Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу ИСиТ.docx
Скачиваний:
6
Добавлен:
07.02.2024
Размер:
1.07 Mб
Скачать

Поддержка больших строк

Максимальный объем данных и служебного кода, содержащихся в одной строке на странице, составляет 8 КБ. Это ограничение может быть нарушено только в двух случаях:

  • если строка содержит данные типа varchar(max), nvarchar(max) или varbinary (max) - размер этих данных не учитывается. Такие данные будут храниться в виде последовательности страниц типа «Текст/изображение», а в странице содержащей строку будет храниться только указатель на начало этой последовательности.

  • если строка содержит данные переменной длины типа varchar(не max), nvarchar(не max) varbinary (не max) или sql_variant, то как только общий размер строки превысит предел в 8 060 байт, SQL Server динамически перемещает один или несколько столбцов переменной длины на отдельные страницы, начиная со столбца с наибольшим размером. Когда происходит перемещение столбца на отдельную страницу, на исходной странице сохраняется только указатель. Если при последующей операции размер строки уменьшается, SQL Server динамически перемещает столбцы обратно на исходную страницу данных. Важно отметить, что в данном случае предел в 8 060 байт может превышать только общий размер строки данных, при этом размер каждого поля строки не может быть больше размера страницы.

Экстенты

Экстенты являются основными единицами организации пространства и используются для эффективного управления страницами. Экстент - это коллекция, состоящая из восьми физически непрерывных страниц.

SQL Server поддерживает два типа экстентов.

  • Однородные экстенты принадлежат одному объекту; все восемь страниц в кластере могут быть использованы только этим владеющим объектом.

  • Смешанные экстенты могут находиться в общем пользовании у не более восьми объектов. Каждая из восьми страниц в экстенте может находиться во владении разных объектов.

Использование смешанных экстентов позволяет сделать распределение места более эффективным, поскольку SQL Server не размещает целые экстенты для таблиц с небольшим объемом данных.

Новая таблица или индекс - это обычно страницы, выделенные из смешанных экстентов. При увеличении размера таблицы или индекса до восьми страниц эти таблица или индекс переходят на использование однородных экстентов для последовательных единиц распределения. При создании индекса для существующей таблицы, в которой содержится достаточно строк, чтобы сформировать восемь страниц в индексе, все единицы распределения для индекса находятся в однородных экстентах.

FILESTREAM

На практике при создании приложений часто приходится хранить большие объемы неструктурированных данных, например, текстовые документы, изображения и видеоролики. Хранение множества таких объектов в реляционной базе данных может привести к падению производительности SQL Server Database Engine, поскольку для их кэширования будет использоваться буферный пул SQL Server. Поэтому обычно такие неструктурированные данные хранятся за пределами базы данных отдельно от структурированных данных. Подобное разделение как правило приводит к усложнению логики приложения. Либо, если данные связаны со структурированным хранилищем, могут быть ограничены возможности файловых потоков и производительность.

В SQL Server 2008 был добавлен новый тип хранения больших двоичных объектов (BLOB) FILESTREAM, который объединяет компонент Database Engine с файловой системой NTFS, размещая данные больших двоичных объектов (BLOB) типа varbinary(max) в файловой системе в виде файлов. Манипулирование данными, хранящимися в FILESTREAM осуществляется при помощи инструкций Transact-SQL, что позволяет использовать оптимизированное хранилище без изменения логики приложений его использующих. Интерфейсы файловой системы Windows также обеспечивают потоковый доступ к этим данным.

Для кэширования данных файлов в хранилище FILESTREAM используется системный кэш NT, что позволяет снизить возможное влияние данных FILESTREAM на производительность компонента Database Engine, поскольку буферный пул SQL Server не используется и память доступна для обработки запросов.

В SQL Server 2008 большие двоичные объекты (BLOB) могут храниться двумя способами:

  • данные стандартного типа varbinary(max), данные которых хранятся в таблице

  • объекты FILESTREAM типа varbinary(max), данные которых хранятся в файловой системе

Выбор в качестве хранилища базы данных или файловой системы определяется размером и назначением данных. Объекты FILESTREAM следует использовать в следующих случаях:

  • средний размер сохраняемых объектов превышает 1 МБ, поскольку при работе с объектами меньшего размера сохранение больших двоичных объектов (BLOB) типа varbinary(max) в базе данных часто позволяет добиться лучшей производительности потоков;

  • важен быстрый доступ для чтения;

Хранилище FILESTREAM реализовано в виде столбца типа varbinary(max), данные которого хранятся в файловой системе как большие двоичные объекты (BLOB). Стандартное ограничение типа varbinary(max), согласно которому размер файла не должен превышать 2 ГБ, не применяется к объектам BLOB, сохраняемым в файловой системе - размеры объектов ограничены только размером тома файловой системы.

Данные FILESTREAM могут сохраняться только в файловых группах FILESTREAM. Файловая группа FILESTREAM представляет собой особый тип файловой группы, в которой вместо файлов базы данных содержатся системные каталоги файлов. Эти системные каталоги файлов называются контейнерами данных, и являются интерфейсом между хранилищем компонента Database Engine и хранилищем файловой системы.

Соседние файлы в предмете Информатика