2013-05-20 2 views
3

Документация оракула says, что при изменении индексных статей shrink space compact и coalesce весьма схожи и могут быть заменены друг на друга, но Tom found некоторые отличия в поведении.В чем разница между «сжатием компактного пространства» и «объединением»?

Поскольку coalesce недоступен в стандартной версии Oracle Database, я полагаю, что есть некоторые преимущества в его использовании.

Итак, в чем отличия? Могу ли я выполнить shrink space compact по динамически меняющемуся индексу?

+0

К сожалению, «coalesce» недоступен для меня - это вариант предприятия. И я хотел узнать, «сжатие пространства компактнее» лучше, чем 'rebuild' для моих целей, потому что с' rebuild' я почти всегда сталкиваюсь с бизнесом ресурса. – ZZa

ответ

1

Прежде всего, индексы обычно не нужно часто перестраивать. Они обычно растут до постоянного размера и остаются там, и их восстановление создает лишь временную выгоду для запросов, которые затем уравновешиваются увеличением нагрузки при их изменении из-за увеличения скорости разделения блоков. Поэтому не забывайте, что лучшая оптимизация для процесса - это полностью исключить его - если вы считаете, что вам нужна частая перестройка, тогда задайте вопрос, и, возможно, причина может быть объяснена, и будет найден другой подход.

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

Сжатие делает что-то подобное, но перемещает заселенные блоки, чтобы освободить блоки в «конце» сегмента индекса, который будет освобожден от него. Таким образом, индексный сегмент фактически становится меньше. Для этого требуется исключительная блокировка на столе.

+0

Что значит «во время сжимания»? В чем же разница с перестройкой индекса? Является ли эта команда «более грубой» или «более легкой»?Мне действительно нужно это знать, потому что теперь у меня возникают проблемы с перестройкой индексов на часто используемых coulmns. – ZZa

+0

См. Обновление в ответе –

1

Вышеуказанный ответ неверен. Есть в основном 4 варианта.

1 - ALTER INDEX COALESCE

2 - ALTER INDEX SHRINK ПРОСТРАНСТВО

3 - ALTER INDEX SHRINK КОСМИЧЕСКИЙ COMPACT

4 - ALTER INDEX REBUILD

Варианты 1 и 3 не бесплатно . Они просто освобождают место в существующих блоках. Coalesce выполняет немного худшую работу, будет больше блоков с 25-50% свободного пространства, а при сжатии компактное пространство будет больше блоков с 75-100% свободного пространства. Однако общее количество блоков остается неизменным. Например, индекс с 200 блоками с коалесценцией и после удаления 1/5 рядов случайным образом будет иметь ~ 1/5 индексных блоков, имеющих 25-50% свободного пространства, в то время как остальные остаются заполненными.

С другой стороны, сокращение пространства и восстановление позволяют освободить блоки и объединить их в существующие, тем самым уменьшив общее количество блоков. Я думаю, что единственное различие - скорость. Когда вы удаляете только 5% из большой таблицы, нет причин перестраивать весь индекс, и он будет очень медленным. Тем не менее, сокращение пространства может быть немного быстрее здесь, потому что он не восстанавливает весь индекс, просто реорганизует блоки.

Очевидно, что самым быстрым выбором было бы объединение или сокращение пространства с компактным вариантом.

Смежные вопросы