Перестройка локальных индексов
Индексы для секций таблицы перестраиваются, как правило, в следующих случаях:
- Вы только что выполнили загрузку бинарных данных в одну или несколько секций.
- Вы хотите избавиться от индексной фрагментации, восстановить дисковое пространство после удалённых индексных ключей, сжать индексные блоки для минимизации используемого дискового пространства, а также для улучшения производительности запросов.
- Вам необходимо исправить физические повреждения в индексах.
Физическое повреждение индекса происходит, когда появляется ошибка в структуре B-дерева локального индекса, что означает её повреждение. Если в секции возникло физическое повреждение индекса, вы можете увидеть подобные сообщения об ошибках: «Bad or invalid compression size» или «db key doesn’t exist». Единственный способ исправить подобные повреждения, это выполнить переиндексацию повреждённого индекса в секции.
Для переиндексации локального индекса необходимо:
- Активировать возможность переиндексации секционированных таблиц.
- Выполнить переиндексацию секции (секций) с повреждённым индексом (индексами).
Далее рассмотрим каждую из этих задач подробнее.
Активация возможности переиндексации секций в базе данных
Для того чтобы выполнять переиндексацию локальных индексов в базе данных необходимо предварительно активировать такую возможность. Сделать это нужно один раз. После чего вы сможете перестраивать локальные индексы в любое удобное для вас время.
Для активации возможности переиндексации локальных индексов применяется утилита PROUTIL ENABLETPIDXBLD:
proutil db-name -C enabletpidxbld
Пример. База данных sportsco запущена в многопользовательском режиме. Следующий пример команды PROUTIL ENABLE TPIDXBLD активирует возможность перестройки локальных индексов в этой базе данных:
proutil sportsco -C enabletpidxbld
Перестройка локального индекса в отдельной секции
После активации возможности вы может выполнить перестройку одного или нескольких локальных индексов для каждой конкретной секции.
Для выполнения этой задачи в онлайн применяется утилита PROUTIL TPIDXBUILD, которая подобна стандартной утилите перестройки индексов (PROUTIL IDXBUILD) и унаследовала множество параметров. Тем не менее, TPIDXBUILD отличается от IDXBUILD в следующем:
- она может работать в онлайн;
- в случае сбоя переиндексации, вы по-прежнему будете иметь доступ к базе данных;
- утилита не поддерживает многопоточность, но вы можете перестраивать локальные индексы для разных секций параллельно.
Утилита PROUTIL TPIDXBUILD запрашивает эксклюзивную блокировку на секцию таблицы во время построения связанных с ней локальных индексов. Таким образом, конечные пользователи не смогут использовать перестраиваемые индексы в запросах до завершения работы TPIDXBUILD. В тоже время, данные будут оставаться доступными на чтение (изменение невозможно) с использованием глобальных индексов.
Синтаксис утилиты PROUTIL TPIDXBUILD:
proutil db-name -C tpidxbuild table table-name partition partition-name [area area-name | index index-name] [-T -SS -B -TB -TM -SG -TMB -TF -pfactor n -rusage]
Параметр |
Назначение |
area area-name | Перестраиваются только локальные индексы, хранящиеся в указанной области. |
index index-name | Перестраивается конкретный индекс. Если вы не указали AREA или INDEX, то перестроены будут все индексы секции. |
-T | Имя каталога, где будут размещаться временные файлы. Если параметр не указан, то утилита разместит временные файлы в текущем рабочем каталоге. |
-SS | Файл, содержащий пути размещения файлов сортировки. Если вы применяете этот параметр, то утилита игнорирует параметр -T. |
-B | Количество блоков с записями в буферном пуле базы данных. |
-TB | Размер блоков сортировки, которые содержат новые индексные ключи. По умолчанию 8Кб. |
-TM | Количество блоков сортировки, которые могут быть объединены за один раз. Значение по умолчанию 8. |
-SG | Количество групп сортировки. Диапазон возможных значений от 8 до 64. |
-TMB | Размер блока слияния. Значение по умолчанию равно значению параметра -TB. Значение этого параметра должно быть большим или равно значению параметра -TB. Если оно будет установлено меньше, то утилита завершит работу с ошибкой. |
-TF | Коэффициент памяти, используемой при сортировке индексных ключей. Значение по умолчанию 50%. |
-pfactor n | Коэффициент сжатия, указывающий, как плотно индексные ключи должны быть размещены в блоке. Значение n должно быть между 60 и 100, указывает на максимальный процент используемого пространства в индексном блоке. Значение по умолчанию 100. |
-rusage | Формирования отчета по используемым ресурсам, например, использование CPU и нагрузка ввода/вывода на диски. |
Пример. Таблица Order секционирована по диапазону на основе столбца OrderDate, имеет три секции Order_2012, Order_2013 и Order_2014. При этом только что выполнена бинарная загрузка данных в эти секции.
Ниже показано как выполнить параллельную перестройку всех локальных индексов для трёх секций. Примечание: для параллельного запуска необходимы три сессии.
proutil sportsco -C tpidxbuild table order partition order_2012 proutil sportsco -C tpidxbuild table order partition order_2013 proutil sportsco -C tpidxbuild table order partition order_2014
Деактивации возможности перестройки индексов в секционированной таблице
Если по каким-то причинам вам необходимо деактивировать возможность перестройки локальных индексов, то сделать это не составит труда.
Первое, что необходимо, это остановить базу данных. Затем выполняется команда PROUTIL DISABLETPIDXBLD:
proutil db-name -C disabletpidxbld
Пример. Предположим, что мы уже остановили базу данных. Следующая команда PROUTIL DISABLETPIDXBLD деактивирует возможность перестройки локальных индексов по секциям:
proutil sportsco -C disabletpidxbld