Организация хранения данных Db2
Наименьшей единицей хранения данных в Db2 на физическом уровне является страница. Допустимые размеры страниц: 4 Кбайт, 8 Кбайт, 16 Кбайт и 32 Кбайт. Информация объектов базы данных (например, записи таблиц и элементы индексов) размещаются на страницах.
Выделение дополнительного пространства для хранения данных выделяется группами страниц, которые называются экстентами. Выполнение операций выделения дополнительного пространства на уровне экстентов увеличивает производительность операций вставки и обновления записей.
Хранение информации в базах данных Db2 организовано в рамках объектов, называемых табличными пространствами. Табличное пространство представляет собой именованный набор контейнеров для хранения информации - файлов либо каталогов в файловой системе сервера баз данных.
Для каждого табличного пространства создается один либо несколько контейнеров для хранения информации, устанавливается размер страницы и область для кэширования данных (буферный пул, см. ниже), а также ряд других параметров.
Существуют следующие виды табличных пространств:
- обычные: используются для размещения пользовательских таблиц и индексов;
- большие: используются для размещения пользовательских таблиц и индексов, а также данных больших объектов (LOB) и данных XML. В современных версиях DB2 большие табличные пространства используются по умолчанию вместо обычных;
- временные: используются для размещения временной информации при исполнении запросов (системные временные табличные пространства) и временных таблиц, определенных приложениями (пользовательские временные табличные пространства).
Вид табличного пространства указывается при его создании и не может быть изменён иначе, как удалением и повторным созданием табличного пространства.
Табличные пространства можно также классифицировать по типу управления, устанавливаемому при создании табличного пространства:
- табличные пространства под управлением системы (SMS, System Managed Storage) – в качестве контейнеров табличного пространства используются каталоги, для размещения объектов хранения в каталогах осуществляется создание файлов с данными. Пространство не распределяется предварительно, файлы увеличиваются динамически. При определении контейнеры фиксируются на момент создания;
- табличные пространства под управлением базы данных (DMS, Database Managed Storage) – в качестве контейнеров табличного пространства используются предварительно распределённые файлы, контейнеры можно добавлять, удалять или менять;
- автоматически управляемые табличные пространства (automatic storage) – автоматическое определение типа и размещения контейнера в зависимости от вида табличного пространства (DMS для обычных и больших табличных пространств, SMS для временных табличных пространств). Конкретные определения контейнеров при создании табличного пространства не задаются, нужные контейнеры создаются автоматически. Увеличением существующих и добавлением новых контейнеров полностью управляет Db2.
Чтобы разрешить применение автоматического управления табличными пространствами, для начала нужно создать базу данных с включенным автоматическим хранилищем (используется по умолчанию) и привязать к ней набор путей хранения данных.
По умолчанию Db2 выполняет последовательную запись в экстенты с «расслоением» между контейнерами. К примеру, если имеется табличное пространство с размером страницы 4 КБ и размером экстента 8 страниц, и используется 3 непосредственных контейнера в табличном пространстве типа DMS, это означает, что 32 КБ данных (4 КБ x 8 страниц в экстенте = 32 КБ) будет записано на один диск прежде, чем начнется запись на следующий.
Начиная с Db2 версии 10.1, с целью упрощения управления хранением данных введено новое понятие – группа хранения данных (storage group). Группой хранения данных называется именованная совокупность путей в файловой системе сервера СУБД, которые могут использоваться для размещения данных. Состав групп хранения в базе данных обычно определяет набор видов устройств хранения, доступных для размещения информации. При создании базы данных в ней всегда автоматически создается группа хранения по умолчанию.
Каждое автоматически управляемое табличное пространство ассоциируются
с одной из созданных групп хранения данных, что и определяется
физическое размещение данных, хранящихся в соответствующих табличных
пространствах. Существует возможность переместить табличное
пространство из одной группы хранения в другую с помощью команды
ALTER TABLESPACE … USING STOGROUP …
.
Организация кэширования данных
В целях сокращения количества выполняемых операций ввода-вывода, Db2
осуществляет кэширование операций чтения и записи, выполняемых над
табличными пространствами. Кэширование осуществляется с использованием
областей оперативной памяти, называемых буферными пулами. Может быть
определено несколько буферных пулов (создаваемых командой CREATE
BUFFERPOOL
) с указанием размера страницы, количества страниц и
признака возможности автоматического управления размером. Каждое
табличное пространство сопоставляется с определенным буферным пулом,
при этом один буферный пул может использоваться совместно несколькими
табличными пространствами.
При выполнении операции чтения сперва производится поиск нужной страницы с данными в буферном пуле. При обнаружении необходимой страницы чтение данных выполняется из буферного пула, в противном случае производится загрузка страницы с диска в буферный пул.
Предусмотрен механизм асинхронной предвыборки страниц в буферный пул при обнаружении предсказуемого характера обращений к страницам. Механизм предвыборки во многих случаях позволяет снизить время ожидания операций чтения нужных данных с диска за счет выполнения чтения в асинхронном режиме. В частности, предвыборка данных активно используется при обработке сложных аналитических запросов.
При выполнении операции записи корректировка страницы выполняется непосредственно в буферном пуле. Запись страницы на диск в синхронном режиме при этом не выполняется, а сохранность данных обеспечивается механизмом ведения транзакционного журнала. Запись измененных страниц табличных пространств на диск ведется асинхронно, в фоновом режиме, и обеспечивает разумную минимизацию объема работы, которая может потребоваться для восстановления состояния базы данных при её аварийном (некорректном) закрытии. Корректное закрытие базы данных (например, при штатной остановке сервера СУБД) обеспечивает запись на диск всех измененных страниц всех буферных пулов.