powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Parallel_degree для индексов и их ребилд
16 сообщений из 16, страница 1 из 1
Parallel_degree для индексов и их ребилд
    #39666096
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется разобраться в этом. Когда делаешь ребилд большого индекса - конечно хочется это сделать побыстрее, поэтому ставишь при ребилде степень побольше.

Но если делать
alter index [index_name] rebuild parallel [N];

то после ребилда degree у индекса изменится - что повлияет на степень выполнения, планы запросов и некоторые другие детали.
Таким образом напрашивается вывод: сделать ребилд с большой степенью, а потом проапдейтить метаданные для индекса в правильные:

alter index [index_name] degree [M];

Но вопрос который меня интересует: если делать параллельный ребилд с большой степенью - не создается ли индекс немного по-другому? Скажем, не будет ли у него N рутов у дерева ( я сейчас про B*tree индексы ) , не повлияет ли это на реальный кост запросов
по уникальным ключам? Есть наблюдение, что влияет, но хотелось бы поинтересоваться, может кто-то глубоко изучал этот вопрос или натыкался на статью об этом.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39666274
Cheese)))
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alter index ... noparallel; после перестроения.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39666716
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вижу, что VLDB and Partitioning Guide раздел 8 писался непонятно для кого.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39666791
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad,

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



Cheese))), stdio,

что за странные ответы? Вы вопрос-то прочли?
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39666811
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где хранятся degree и prefix_length ( для компрессии ) для партиций индекса?
Потому что в dba_ind_partitions этой инфы нет.
Если я пересоздам партицию индекса в 32 потока - не аффектнет ли это планы, которые используют как раз эту партицию?
Вопросы, вопросы...
То же самое для компрессии - как узнать, сжата ли уже эта партиция или еще только предстоит ее сжать?
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39666832
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, черт, я был неправ. Я почему-то считал что можно ребилднуть одну партицию индекса с COMPRESS.

Эта нота говорит что нельзя:

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=396291552743654&id=312843.1&_afrWindowMode=0&_adf.ctrl-state=wmewgytqh_4

Притом что в доке такой синтаксис есть!

https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1010.htm

Как обычно - верить нужно не документации, а всяким нотам от Металинка. Это очень хреново, т.к. индекс на 10 терабайт и пересоздавать его так просто не пересоздашь.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39666865
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суть в том, что для того, чтоб хоть одна секция индекса была сжатой, необходимо было создавать сам индекс с опцией COMPRESS
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
tst> create table t1(a number) partition by range(a)
  2  (partition p1 values less than(10), partition p2 values less than(maxvalue));

Table created.

tst> create index t1_idx on t1(a) NOCOMPRESS local
  2  (partition p1 nocompress, partition p2 compress);
create index t1_idx on t1(a) NOCOMPRESS local
                       *
ERROR at line 1:
ORA-28659: COMPRESS must be specified at object level first


tst> create index t1_idx on t1(a) COMPRESS local
  2  (partition p1 nocompress, partition p2 compress);

Index created.

tst> select index_name, compression from user_indexes where index_name='T1_IDX';

INDEX_NAME                     COMPRESS
------------------------------ --------
T1_IDX                         ENABLED

tst> select index_name, partition_name, compression from user_ind_partitions where index_name='T1_IDX';

INDEX_NAME                     PARTITION_NAME                 COMPRESS
------------------------------ ------------------------------ --------
T1_IDX                         P1                             DISABLED
T1_IDX                         P2                             ENABLED

Да и в доке это есть https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_1010.htm#BABHFFHI
Код: plaintext
If you want to use compression for a partitioned index, then the index must have compression enabled at the index level.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667136
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров, ну у меня индекс уже COMPRESS. Просто с опцией compress , скажем 5. А мне нужно изменить на compress 3.
И судя по всему единственный способ это сделать - это дропнуть индекс и создать его заново.

Т.е. prefix_length задается только на глобальном уровне, и даже нет способа его изменить.
В то время как отдельная партиция индекса может быть либо сжата ( и тогда она будет сжата с глобальным prefix_length), либо разжата.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667202
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таки иметь разную длину префикса для разных секций -- достаточно редкая хотелка (а оптимальная должна вычисляться на этапе проектирования, или тот же analize ... validate structure на этапе, когда перестроение еще не является катастрофой)
Не, конечно, можно придумать случаи, когда это будет полезно (например, бизнес растет, частота операций нарастает и уже оптимальней дату операции включать в префикс ), но это как раз увеличение длины префикса

А вот не сжимать текущую секцию вовсе для ускорения всяких обновлений -- вполне нормальный подход с активными/архивными секциями

В 12c появился Advanced index compression -- там можно и разные способы на разные секции (но, насколько понимаю, платный и со своими тараканами)
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667212
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровТаки иметь разную длину префикса для разных секций -- достаточно редкая хотелка (а оптимальная должна вычисляться на этапе проектирования)

Ахаха. Ну, не вычислили те, кто это проектировал. Мне трудно их судить - у оракла примерно миллион опций при создании таблиц/индексов, реально нужно иметь очень большой опыт чтобы еще на этапе проектирования абсолютно все их выставить правильно. Поэтому оракл мог бы и сделать возможность менять их по-партиционно :)
Ладно, будем думать как перестроить 10-терабайтный первичный ключ на живой таблице.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667216
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valergrad,

а так да, в 12c advanced compression насколько я понял автоматически вычислять эту степень и регулировать ее не только на уровне партиции, но и отдельного блока.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667229
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ValergradЛадно, будем думать как перестроить 10-терабайтный первичный ключ на живой таблице.Я вот тут подумал, если конкретные индексы гвоздями не прибиты, то (если есть ресурсы, конечно) можно построить "промежуточный" составной индекс с дополнительным полем "константа 0", например
А затем перестроить старый

Вроде как при этом:
подхватится новый индекс там, где использовался старый

в обоих случаях источником нового индекса может служить старый, без обращения к таблице
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667811
Nobody111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудров, хорошая идея.

Даже если прибиты, можно, думаю, переименовать новый в старый.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39667983
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nobody111Вячеслав Любомудров, хорошая идея.

Даже если прибиты, можно, думаю, переименовать новый в старый.

Это да. Но еще лишних 10 терабайт у нас нету ( да еще и в одном тейблспейсе).
Соответственно очень извращенный план который приходит в голову:

1. Создать ind2 ( с лишним полем 0 ) как unusable для всех партиций.
2. Далее по каждой партиции осуществлять следующую операцию: ребилдить по одной партиции ind2, после чего дропать ( т.е. делать эту же партицию unusable ) у ind. Таким образом, в любой момент для любой партиции будет хотя бы один рабочий индекс.
3. Когда ind2 будет построен целиком, нужно дропнуть Ind, и тут же создать его unusable.
4. После чего такой же цикл как в п.2 по перекидыванию партиций из ind2 в ind.

Это был бы отличный план... вот только поиск по dba_source в пакетах выдает 225 запросов в которых этот индекс захинтован. Да, у нас в компании распространен идиотизм хинтования запросов вместо решения реальных проблем. Это, разумеется, постоянно делает только хуже ( в 9 случаях из 10 я решаю перфоманс ишью просто удаляя все хинты из запроса ), и это всего лишь очередной такой случай.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39668017
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Valergrad2. Далее по каждой партиции осуществлять следующую операцию: ребилдить по одной партиции ind2, после чего дропать ( т.е. делать эту же партицию unusable ) у ind. Таким образом, в любой момент для любой партиции будет хотя бы один рабочий индекс.не поможет, если бинд используется для partition pruning. Так что только если используете литералы.
...
Рейтинг: 0 / 0
Parallel_degree для индексов и их ребилд
    #39668228
Valergrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderValergrad2. Далее по каждой партиции осуществлять следующую операцию: ребилдить по одной партиции ind2, после чего дропать ( т.е. делать эту же партицию unusable ) у ind. Таким образом, в любой момент для любой партиции будет хотя бы один рабочий индекс.не поможет, если бинд используется для partition pruning. Так что только если используете литералы.

Боюсь я не понял мысль. Можете пояснить?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Parallel_degree для индексов и их ребилд
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]