Модели страничной организации данных в современных БД

Реляционные СУБД хранят следующие разновидности объектов во внешней памяти БД:

Хранение данных во внешней памяти в известных СУБД (Oracle, IBM DB2, Microsoft SQL Server, Sybase и Informix и др.) организовано очень похожим образом. Основными единицами физического хранения являются блок данных, экстент, чанк. Логический уровень представления информации включает пространства (либо табличные пространства). Блок данных (block) или страница (page) является единицей обмена с внешней памятью. Размер страницы фиксирован для базы данных (Oracle) или устанавливается при создании БД.

Размер блока оказывает большое влияние на производительность базы данных — при больших размерах скорость операций чтения/записи растет (особенно это характерно для полных просмотров таблиц и операций интенсивной загрузки данных), однако возрастают накладные расходы на хранение (база увеличивается) и снижается эффективность индексных просмотров. Меньший размер блока позволяет более экономно расходовать память, но вместе с тем относительно дорог. Длинные блоки (16, 32 или 64 Кбайт) лучше использовать для больших объектов данных: полнотекстовые фрагменты, мультимедиа-объекты, длинные строки и т.п. Короткие блоки (2 или 4 Кбайт) лучше подходят для значений числовых типов, недлинных строк, значений даты и времени. Следует также учитывать размер блока ОС, он должен быть кратен размеру блока базы данных.

Пространством внешней памяти, отведенным администратором, СУБД управляет с помощью экстентов (extent), т.е. непрерывных последовательностей блоков (страниц). Экстенты представляют собой единицу выделения памяти для таблиц и индексов. Информация о наличии экстентов для объекта схемы данных находится в специальных управляющих структурах, реализация которых зависит от СУБД. На управление экстентами (выделение пространства, освобождение, слияние) тратятся определенные ресурсы, поэтому для достижения эффективности нужно правильно определять их параметры. СУБД от Oracle, IBM, Informix позволяют определять параметры этих структур, а в Sybase экстенты имеет постоянный размер, равный 8 страницам. Уменьшение размера экстента будет способствовать более эффективному использованию памяти, однако при этом возрастают накладные расходы на управление большим количеством экстентов, что может замедлить операции вставки большого количества строк в таблицу. В Informix существует еще одна единица физического хранения, промежуточная между файлом (или разделом диска) и экстентом, — это «чанк» (от английского chunk, что дословно переводится как «емкость»). Чанк позволяет более гибко управлять очень большими массивами внешней памяти. В одном разделе диска или файле администратор может создать несколько чанков.

Основной единицей осуществления обмена данных является страница данных. Все данные хранятся постранично. При табличном хранении данные на одной странице являются однородными, т. е. страница может содержать только данные или только индексы.

Например, для СУБД MS SQL Server 2000 размер страниц – 8 Kb, заголовок страницы – 96 байт. Страницы содержат строки данных, которые размещаются последовательно и начинаются сразу после заголовка. Все страницы данных имеют одинаковую структуру, представленную на рис. 2.6.

 

Заголовок страницы
строки данных 1
строки данных 2
строки данных 3
Свободное место
Смещения страниц

 

 

Рисунок 2.6 - Структура страницы данных MS SQL Server 2000

Заголовок страницы содержит системную информацию: идентификатор объекта данных, которому принадлежит страница; логический номер страницы; логические номера следующей и предыдущей страниц в цепочке; номер следующей свободной строки на странице. В конце страницы располагается таблица смещения строк. В БД каждая строка имеет уникальный идентификатор в рамках всей базы данных, часто называемый RID – номер строки, он имеет размер 4 байта и состоит из номера страницы и номера строки на странице. При упорядочении строк на страницах не происходит физического перемещения строк, все манипуляции происходят со смещениями. При переполнении страниц создается специальный вид страниц, называемых страницами остатка. Строки, не уместившиеся на основной странице, связываются со своим продолжением на страницах остатка с помощью ссылок-указателей, которые содержат номер страницы и номер слота на странице.