15. Методы физического хранения данных на диске. - KattyOG/Database GitHub Wiki

Методы физического хранения данных на диске.

Хранение данных и в прошлых, и в новых версиях организовано в виде иерархических структур:

  • База данных. Рассматривается как наивысший уровень абстракции для хранилища данных (конкретного сервера). Является высшим уровнем, на который может быть наложена блокировка (lock), хотя явно задать блокировку на уровне базы данных нельзя.
  • Файл. Рассматривать как ближайшее подобие устройства (в более ранних версиях). Для хранения единственной базы данных могут быть выделены несколько файлов. Но в один файл нельзя поместить более одной базы данных. По умолчанию база данных использует два файла.
    • В первом физическом файле базы данных хранится реальная информация. Файл должен иметь расширение .mdf (это рекомендация, а не требование).
    • Второй файл является вспомогательным файлом базы данных ее журналом. Журнал постоянно хранится в файле с расширением .ldf, и без него база данных работать не будет.

  • Экстент. Являет собой основную единицу пространства, выделяемую под таблицу или индекс. Экстент состоит из восьми смежных страниц данных. В SQL Server при создании таблицы изначально не выделяется ни одной страницы. Они добавляются только при вставке в таблицу новых строк. По мере добавления в таблицу записей, для хранения информации выделяются все новые страницы до тех пор, пока их количество не достигнет восьми. С этого момента при необходимости дополнительного пространства для хранения данных SQL Server будет выделяться как минимум экстент. Экстенты бывают двух типов:
    • Разделяемые экстенты . Разделяемые экстенты могут совместно использоваться восемью различными объектами (т. е. каждая страница экстента может принадлежать другому объекту). Все создаваемые таблицы и индексы помещаются в разделяемые экстенты. Как только количество страниц, выделенных под объект, достигает восьми, для объекта будет выделен новый однородный экстент.
    • Однородные экстенты . Структура однородных экстентов понятна из названия. Каждая страница такого экстента принадлежит одному и тому же объекту.

      Об экстентах должно быть известно следующее:
    • После заполнения экстента при вставке новой записи для ее хранения выделяется целый новый экстент, а не только пространство, соответствующее размеру добавляемой записи.
    • Благодаря предварительному выделению пространства, SQL Serv er экономит время, которое потребовалось бы в случае выделения пространства во время добавления каждой новой строки.
    • Экстенты могут блокироваться. Однако блокировка может накладываться на экстент только во время выделения нового либо высвобождения старого экстента.
  • Страница. Является элементарной единицей пространства выделяемого внутри отдельного экстента. В SQL Server размер страницы составляет 8 КБ. Страница может рассматриваться как контейнер для хранения и строк таблиц и индексов. Одна строка не может быть разделена между двумя страницами. В состав страницы входят:
    • 96 байтный заголовок страницы (page header); заголовок включает: номер страницы , тип страницы, количество свободного пространства на странице, идентификатор единицы распределения объекта, кот орому принадлежит страница.
    • сами данные
    • указатели смещения строк (row offset).


Следует обратить внимание на размещаемые в конце страницы указатели, необходимые для определения в странице позиции, с которой начинаются данные конкретной строки. В SQL Server существуют следующие типы страниц:

  • страницы данных (Data Pages);
  • страницы индекса (Index Pages);
  • ВLОВ-страницы (Text/Image Pages) - для хранения данных типа text, ntext, image, nvarchar(max), varchar(max) и xml, а также varchar, nvarchar, varbinary, и sql_variant, если их длина > 8 Кб;
  • карты размещения страниц (Global Allocation Map, Shared Global Allocation – GAM, SGAM);
  • страницы свободного пространства (Page Free Space - PFS);
  • карты размещения индекса (Index Allocation Мар - IAM);
  • cхема массовых изменений (Bulk Changed Map);
  • cхема разностных изменений (Differential Changed Map).

Страницы данных (DataData PagesPages)

Страницы данных (Data Pages)

  • В страницах данных хранятся все реальные данные таблицы, кроме ВLОВ-данных.
  • Если в строке имеется столбец, в котором содержатся BLOB-данные, тогда все обычные данные помещаются в страницу данных, в которой также находится 16-байтовый указатель на страницу, хранящую ВLОВ-информацию.
  • При использовании опции TEXT IN ROW, BLOB-данные помещаются непосредственно внутри текста таблицы, если при этом строка целиком помещается в странице, в противном случае, опять будет использоваться 16- байтовый указатель.
  • Страницы файлов данных SQL Server нумеруются последовательно: первая страница файла получает нулевой номер (0).
  • Каждый файл базы данных имеет уникальный цифровой идентификатор. Чтобы уникальным образом определить страницу базы данных, необходимо использовать как идентификатор файла, так и номер этой страницы.
  • Первая страница каждого файла — это страница заголовка файла; она содержит сведения об атрибутах данного файла. Некоторые другие страницы, расположенные в начале файла, тоже содержат системные сведения, например карты размещения. Одна из системных страниц, хранимых как в первичном файле данных, представляет собой загрузочную страницу базы данных, которая содержит сведения об атрибутах этой базы данных.

Страницы индекса (Index Pages)

Страницы индекса содержат страницы разных уровней дерева некластерного индекса, а также страницы, не являющиеся узлами дерева кластерного индекса.
BLOB-страницы

  • BLOB-страницы хранятся в собственном специальном формате.
  • B BLOB-страницах отсутствуют отдельные строки как таковые.
  • SQL Server выделяет для хранения BLOB столько страниц, сколько нужно, однако он не гарантирует, что выделенные страницы будут являться смежными - они могут быть размещены где угодно внутри файла базы данных.
  • BLOB -страницы организовываются в структуру сбалансированного дерева (balanced tree).

Страницы типа GAM, SGAM, PFS используются для определения свободных и используемых страниц и экстентов. Фактически в этих страницах содержится информация о доступном пространстве. Рассмотрение данных типов страниц не является обязательным для высококачественной разработки приложений или системного администрирования. Подробную информацию по этому вопросу (если вы страдаете бессонницей) можно найти в Books Online.
⚠️ **GitHub.com Fallback** ⚠️