К вопросу о реорганизации индексов. Несколько простых советов

dbstalker, 03 июня

Однозначно поводом для перестроения является ситуация, когда таблица, работавшая на вставку, теперь становится только-на-чтение (read-only). В этом случае перестроение дерева освободит место и обеспечит лучшее уплотнение листовых блоков, а значит, повысит производительность при диапазонном сканировании.

Также стоит выполнить реорганизацию индекса, когда использование дерева действительно плохое и перестройка может снизить уровень дерева.

Если перестройка индекса не снижает его уровня, но индекс очень активен и занимает почти весь буферный кеш, все ж таки имеет смысл заняться его реорганизацией. В этой ситуации экономия памяти диска будет минимальной, экономия буферного кеша может быть существенна.

Если ключи добавляются или удаляются только на одной стороне индексного дерева, то распределение индексных ключей может стать неравномерным, со множеством разреженных и пустых блоков по одну сторону дерева. В этом случае также индекс рекомендуется перестроить.

Если для дерева нельзя снизить уровень, а приложения не выполняют больших диапазонных сканирований, то вообще не стоит заниматься реорганизацией индекса.

Как лучше выполнить REBUILD

Когда индексы перестраиваются, эту работу нужно сделать быстро и эффективно. Двумя факторами, способными помочь в усилиях по перестройке индексов, являются параллелизм и отказ от генерации журнала обновлений.

Чтобы использовать первый фактор, можно включить в команду ALTER index... rebuild фразу parallel.

Для того чтобы задействовать второй фактор, нужно указать в этой команде фразу nologging.

alter index MY_INDEX rebuild parallel (degree 4) nologging tablespace INDX

Обычно генерация журнала обновления во время перестройки индекса не требуется. Поэтому отказ от генерации журналов обновлений и перестройка индексов с использованием фразы parallel помогает эффективной и быстрой перестройке индексов.

Однако после перестройки индекса выполните резервное копирование индексных табличных пространств или , по возможности, полное резервное копирование.

Кроме rebuild полезно также сжимать и объединять листья индекса, используя для этого опцию coalesce оператора alter index. Эта опция способствует объединению блоков листьев и/или уровней индекса, так чтобы можно было повторно использовать освободившиеся блоки.

Почитайте на досуге еще немного об индексах

Немного полезностей об индексах и их реорганизации К вопросу о реорганизации индексов. Несколько простых советов К вопросу о реорганизации индексов Индексы на основе B* - дерева Как найти листовой индексный блок для конкретной записи таблицы? sys_op_lbid

Тэги: индексы

ОднаКнопка

1 комментарий

Прокоментировать

blacksaifer
8 июня 2010 г. в 06:49

Стоит учитывать особенность работы ALTER INDEX с опцией PARALLEL N. После перестройки индекса в словаре бд опция DEGREE индекса будет установлена в то самое N, которое вы использовали при выполнении ALTER INDEX. Это, очевидно, может привести к тому, что оптимизатор начнет распараллеливать запросы, юзающие индекс. Во избежание подобных инцидентов, если вы точно знаете, что "неявных" параллелей по индексу быть не должно, после
ALTER INDEX <ind_name> REBUILD PARALLEL N
нужно выполнить
ALTER INDEX <ind_name> NOPARALLEL.

Подробнее тут: http://blog.tanelpoder.com/2007/06/23/a-gotcha-with-parallel-index-builds-parallel-degree-and-query-plans/

 

Новый комментарий

Я не спамер: введите суму 1+8



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Телепрограмма
23 июня, 1 ответа
Турция
23 июня, 4 ответа
Выбор люстры
22 июня, 1 ответа