Страницы и экстенты

Основной единицей хранилища данных в SQL Server является страница. Место на диске, предоставляемое для размещения файла данных (MDF- или NDF-файл) в базе данных, логически разделяется на страницы с непрерывным перечислением от 0 до n. Дисковые операции ввода-вывода выполняются на уровне страницы. А именно, SQL Server считывает или записывает целые страницы данных.

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

Страницы

В SQL Server размер страницы составляет 8 КБ. Это значит, что в одном мегабайте базы данных SQL Server содержится 128 страниц. Каждая страница начинается с 96-байтового заголовка, который используется для хранения системных данных о странице. Эти данные включают номер страницы, тип страницы, объем свободного места на странице и идентификатор единицы распределения объекта, которому принадлежит страница.

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

Тип страницы

Содержимое

Данные

Строки данных со всеми данными, кроме данных типа text, ntext, image, nvarchar(max), varchar(max) и varbinary(max), а также данными типа xml, когда параметр текст в строке установлен в значение ON.

Индекс

Записи индекса.

Текст/изображение

Типы данных больших объектов:

  • text, ntext, image, nvarchar(max), varchar(max), varbinary(max) и xml.

Столбцы переменной длины, когда строки данных превышают размер 8 КБ:

  • varchar, nvarchar, varbinary и sql_variant.

Глобальная карта распределения, общая глобальная карта распределения

Сведения о том, размещены ли экстенты.

Свободное место на страницах

Сведения о размещении страниц и доступном на них свободном месте.

Карта распределения индекса

Сведения об экстентах, используемых таблицей или индексом для единицы распределения.

Схема массовых изменений

Сведения об экстентах, измененных массовыми операциями со времени последнего выполнения инструкции BACKUP LOG для единицы распределения.

Схема разностных изменений

Сведения об экстентах, измененных с момента последнего выполнения инструкции BACKUP DATABASE для единицы распределения.

ПримечаниеПримечание

Файлы журнала не содержат страниц, в них содержится последовательность записей журнала.

Строки данных заносятся на страницу последовательно, сразу же после заголовка. Таблица смещения строк начинается в конце страницы; каждая таблица смещения строк содержит одну запись для каждой строки на странице. Каждая запись регистрирует, насколько далеко от начала страницы находится первый байт строки. Записи в таблице смещения строк находятся в обратном порядке относительно последовательности строк на странице.

Страница данных SQL Server со смещениями строк

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

Строка не может разделить страницу на части, однако часть строки может быть перемещена на другую страницу, чтобы строка действительно была очень большой. Максимальный объем данных и служебного кода, содержащихся в одной строке на странице, составляет 8 060 байт (8 КБ). Однако сюда не включены данные, хранимые в типе страницы «Текст/изображение». Это ограничение не такое строгое для таблиц, содержащих столбцы, относящиеся к типам данных varchar, nvarchar, varbinary или sql_variant. Когда общий размер строк всех фиксированных и переменных столбцов в таблице превышает предел в 8 060 байт, SQL Server динамически перемещает один или более столбцов переменной длины на страницы в единице распределения ROW_OVERFLOW_DATA, начиная со столбца с наибольшей шириной. Это действие выполняется всегда, когда в результате операций вставки или обновления общий размер строки выходит за предел в 8 060 байт. Когда происходит перемещение столбца на страницу в единице распределения ROW_OVERFLOW_DATA, 24-байтовый указатель на исходной странице в единице распределения IN_ROW_DATA сохраняется. Если при последующей выполняемой операции размер строки уменьшается, SQL Server динамически перемещает столбцы обратно на исходную страницу данных. Дополнительные сведения см. в разделе Превышающие размер страницы данные строки, превышающие 8 КБ.

Экстенты

Экстенты являются основными единицами организации пространства. Экстент состоит из восьми непрерывных страниц или 64 КБ. Это значит, что в одном мегабайте базы данных SQL Server содержится 16 экстентов.

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

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

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

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

Смешанные и однородные экстенты