Создание политик секционирования и деталей в Database Administration Console
Вы научились создавать новые секционированные таблицы в Data Dictionary. Следующим шагом вы научитесь создавать политики секционирования и детали политики секционирования для секционированной таблицы. Сделать это можно двумя способами:
- С помощью Database Administration Console
- С помощью ABL API for Table Partitioning Management
Сначала рассмотрим создание политики в Database Administration Console
Создание политик секционирования
Для создания политик секционирования в Database Administration Console применяется мастер Create Table Partition Policy, в котором необходимо настроить соответствующие свойства политики. Мастер состоит из двух ключевых страниц, где необходимо задать:
- Имя политики, базу данных, таблицу, области хранения и правило размещение объектов.
- Тип секционирования, поля и локальные индексы.
Рассмотрим подробнее свойства политики секционирования.
Страница первая: имя политики, база данных, таблица, области хранения и правило размещение объектов
Policy name – обязательное поле. Определяет имя политики секционирования. Должно быть уникальным в пределах базы данных, может содержать буквы латинского алфавита, цифры и символы подчёркивания. Не допускается использование пробелов или специальных символов, таких как «звёздочка» (*), амперсанд (&) или точка (.).
Description – содержит описание политики секции.
Database connection – обязательное поле. Определяет имя подключённой базы данных, в которой активирован Table Partitioning.
Table – обязательное поле. Определяет имя таблицы, для которой создаётся политика.
Default data area – обязательное поле. Определяет область хранения для размещения данных таблицы по умолчанию.
Default index area – обязательное поле. Определяет область хранения для размещения индексов таблицы по умолчанию.
Default LOB area – обязательное поле. Определяет область хранения для размещения LOB-полей таблицы по умолчанию.
Object allocation rule – здесь две опции:
- None – set new partitions not to allocate space (по умолчанию). Используйте эту опцию в случае, если вы собираетесь выделять индивидуальное пространство для новых секций позже (во время добавления деталей секции в политику).
- Immediate – set new partitions to allocate space. Пространство для всех новых секций будет выделено немедленно.
Страница вторая: тип секционирования, поля и локальные индексы
Has range – определяет тип табличного секционирования:
- По умолчанию галочка снята и предполагается, что наше секционирование или подсекционирование не включает диапазон (range).
- Если ваше секционирование или подсекционирование включает диапазон (range), то галочка должна быть установлена. Не забывайте, что при подсекционировании, основанном на списках (list) и диапазоне (range), последний столбец должен быть range.
Partition fields – здесь указываются поля, по которым будет выполняться секционирование/подсекционирование. Используйте кнопку Add field from tables или Add fields from index для добавления идентифицирующих секцию полей. Если после выбора полей из индекса, их окажется больше чем необходимо, то удалите лишние с помощью кнопки Remove Field.
Partition aligned indexes – определяет секционно-ориентированные индексы. В этой секции допускаются только те индексы, которые имеют те же выбранные поля в качестве лидирующих компонент. Должен быть выбран, по крайней мере, один локальный индекс для определения секции.
Процесс создания политик секционирования
Только что мы познакомились с свойствами политики секционирования и можем перейти к её созданию с помощью Database Administration Console.
Для создания политики секционирования для таблицы применяется следующая последовательность действий:
- В консоли администрирования щёлкните по пункту меню
Database Administration -> Database Connections
Откроется вкладка Database Administration, где на левой панели будет выведен список всех доступных подключений баз данных.
- В списке доступных подключений щёлкните по той базе данных, в которой активировано табличное секционирование, и в которую вы собираетесь добавлять новую политику секционирования.
На правой панели отобразится пять секций с информацией о базе данных, включая необходимую нам секцию Storage Management.
- В секции Storage Management щёлкните по Create partition policy. На открывшейся странице введите:
- Имя политики;
- Описание, если необходимо;
- Выберите подключение (если не определено);
- Выберите таблицу;
- Определите области хранения для данных, индексов и LOB-полей, которые будут использоваться по умолчанию;
- Выберите правило размещения объектов (None или Immediate).
Создание деталей политики секции
После создания политики секционирования необходимо создать её детали. Напомним, каждая деталь политики секции идентифицирует одну секцию, при этом, максимальное количество секций в одной таблице не может быть больше 32 765.
Пример. Представьте, вы хотите разделить таблицу Order по диапазону значений столбца OrderDate. Также представьте, что эта таблица содержит двадцать четыре месяца данных и вам необходимо разделить эти данные поквартально. В этом случае вам необходимо создать восемь деталей политики секций, по одной на каждые три месяца.
Другой пример. Представьте, вам необходимо подсекционировать таблицу Order по list-range, используя столбцы Carrier и OrderDate. Также представьте, что вы используете два способа доставки, обычная почта и курьерская доставка, и данные по этим способам доставки могут быть разделены по OrderDate на три года (2012, 2013, 2014). Соответственно, вам необходимо создать шесть секций, по одной для каждой комбинации значений столбцов Carrier и OrderDate.
Свойства деталей политики секционирования
Для создания деталей политики секционирования используется страница Edit Partition Policy Details, где вам необходимо указать значения некоторых свойств каждой детали. Познакомимся с этим свойствами.
- Values – (обязательное) определяет значение столбца для секционирования, или множественные значение столбцов, если вы применяете подсекционирование:
- Если секционный столбец основан на типе List, то применяется оператор сравнения EQ (равно). Здесь указывается значение, в точности соответствующее значению столбца.
- Если секционный столбец основан на типе Range, то применяется оператор сравнения LE (меньше или равно). В этом случае необходимо указать верхний диапазон возможных значений.
- Name/Description – (обязательное) указывается имя детали политики секционирования. Обычно содержит имя политики секционирования и значение секционного столбца, разделённые символом подчёркивания.
-
- Имя должно быть уникальным в пределах базы данных и может содержать символы английского алфавита, цифры и символы подчёркивания. Не допускается использование пробелов или специальных символов, таких как «звёздочка» (*), амперсанд (&) или точка (.).
- Allocation – существует три возможных состояния, которые отражают текущий статус размещения секции: Allocated, Composite и Split-target.
-
- Статусы Composite и Split-target применяются во время распределения по секциям существующих данных в таблице. Мы рассмотрим их на следующем уроке, когда вы будете изучать секционирование существующих таблиц.
- Для новых секционированных таблиц, когда в Object allocation rule вы выбрали значение Immediate при создании политики секционирования, статус Allocated присваивается по умолчанию. Если вы выбрали None, то этот статус вы должны установить самостоятельно.
- Default Areas – (обязательное) области хранения, которые по умолчанию наследуются из соответствующих свойств политики секционирования.
-
- Вы можете использовать эти свойства для размещения данных, индексов и LOB-полей в индивидуальных областях хранения. Напомним, распределения секций по различным областям хранения, особенно если эти области размещаются на разных устройствах хранения, способствует улучшению производительности.
- Partitions – если у вас используется несколько индексов и LOB-полей, с помощью этого свойства вы можете распределить их по отдельным областям хранения, что также способствует улучшению производительности. Ещё вы можете указать какой тип буферного пула (первичный или альтернативный) должен использоваться для данных, индекса или LOB. По умолчанию применяется первичный буферный пул.
Процесс создания деталей политики секционирования
Процесс создания деталей политики секционирования для обычного секционирования и для подсекционирования практически одинаков, отличия приведены ниже:
- Если речь идёт об обычном секционировании, то в столбце Values определяется только одна ячейка, соответствующая одному секционному столбцу.
- Для подсекционирования столбец Values для каждой детали политики секции будет содержать две и более ячейки, по одной для каждого секционного столбца. Например, если вы используете подход list-range, то у вас будет две ячейки, если используете подход list-list-range, то три.
Предположим, вы создали политику секционирования для таблицы. Далее необходимо выполнить следующую последовательность действий:
- На странице Table Partition Policies щёлкните мышью по Edit Details в столбце
Откроется страница Edit Partition Details.
- Щёлкните Add для добавления новой детали политики секционирования.
В таблицу деталей будет добавлена новая строка.
- В столбце Name/Description укажите имя секции и, если необходимо, описание.
- В столбце Values укажите значение столбца или нескольких столбцов, если применяется подсекционирование. Помните:
- Если секционный столбец основан на списке, то оператор сравнения будет EQ. Значение должно точно соответствовать значению, которое может иметь этот столбец.
- Если секционный столбец основан на диапазоне, то оператор сравнения будет LE – укажите верхнюю границу требуемого диапазона.
- Если секционный столбец имеет тип даты, используйте встроенный календарь для выбора нужной даты, или введите дату вручную в формате YYYY-MM-DD.
- Если вы выбрали «None – set new partitions not to allocate space» при создании политики секционирования, то установите «галочку» в поле Allocated. Напомним, если вы в политике выбрали Immediate, то это поле установлено по умолчанию.
- По умолчанию для каждой секции данные, индексы и LOB-поля наследуют области хранения, указанные в родительской политике секционирования. Если вы хотите использовать другие области для этих объектов, введите имя области или щёлкните по иконке поиска для выбора области из списка доступных областей хранения. В этом случае вы можете распределить секции одной таблицы между несколькими физическими устройствами хранения, тем самым снижая дисковую нагрузку ввода/вывода и улучшая производительность. Важное замечание:
-
- После того, как секции размещены (Allocated), нельзя изменить их область хранения.
- Если у вас появятся новые индексы и LOB-поля в будущем, вы сможете назначить для них другие области хранения.
- Щёлкните Update для применения изменений.
- Повторите пункты с 2 по 7 для каждой новой секции.
- Щёлкните Commit для сохранения всех деталей политики секционирования.
Пример создания политики секционирования и деталей политики секционирования для list-range
Предположим, что мы создали новую секционированную таблицу tpOrder и несколько полей в ней. Были созданы:
- первичный уникальный глобальный индекс OrderNumGlobalIdx, который основан на поле OrderNum;
- локальный индекс CarrierOrderDateLocalIdx на основе полей Carrier и OrderDate.
Используются два типа доставки – обычная почта (Standard Mail) и курьерская доставка (FlyByNight Courier). Мы хотим, чтобы наши данные были сгруппированы по дате заказа за два года (2013 и 2014) и по типу доставки.
Для реализации подсекционирования с использованием подхода list-range мы должны создать политику секционирования tpOrder и четыре связанных с ней детали политики секционирования:
- tpOrder_StandardMail_2013
- tpOrder_StandardMail_2014
- tpOrder_FlyByNight_Courier_2013
- tpOrder_FlyByNight_Courier_2014
Когда мы выберем индекс CarrierOrderDateLocalIdx, то в таблицу Partition fields на странице настройки политики будут добавлены два поля: Carrier и OrderDate. Позже, когда мы будем создавать детали политики секционирования, в столбце Values у нас будет две ячейки, связанные с этими полями.
Первый столбец секции в нашем случае будет Carrier, который является списком (list), а второй, OrderDate, который является диапазоном (range). Для создания секции tpOrder_StandardMail_2013, в качестве значения столбца Carrier мы введем Standard Mail, а для OrderDate укажем верхнюю границу диапазона 2013-12-31. В результате, все записи по заказам, у которых способ доставки указан Standard Mail, и которые были оформлены вплоть до 31 декабря 2013 года, будут принадлежать этой секции.