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

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

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

alter index [index_name] degree [M];

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

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



Cheese))), stdio,

что за странные ответы? Вы вопрос-то прочли?
...
Рейтинг: 0 / 0
27.06.2018, 20:21
    #39666811
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
А где хранятся degree и prefix_length ( для компрессии ) для партиций индекса?
Потому что в dba_ind_partitions этой инфы нет.
Если я пересоздам партицию индекса в 32 потока - не аффектнет ли это планы, которые используют как раз эту партицию?
Вопросы, вопросы...
То же самое для компрессии - как узнать, сжата ли уже эта партиция или еще только предстоит ее сжать?
...
Рейтинг: 0 / 0
27.06.2018, 21:42
    #39666832
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
А, черт, я был неправ. Я почему-то считал что можно ребилднуть одну партицию индекса с 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
28.06.2018, 01:52
    #39666865
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
Суть в том, что для того, чтоб хоть одна секция индекса была сжатой, необходимо было создавать сам индекс с опцией 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
28.06.2018, 13:25
    #39667136
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
Вячеслав Любомудров, ну у меня индекс уже COMPRESS. Просто с опцией compress , скажем 5. А мне нужно изменить на compress 3.
И судя по всему единственный способ это сделать - это дропнуть индекс и создать его заново.

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

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

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

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

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

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

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

Даже если прибиты, можно, думаю, переименовать новый в старый.
...
Рейтинг: 0 / 0
01.07.2018, 12:45
    #39667983
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
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
01.07.2018, 15:16
    #39668017
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
Valergrad2. Далее по каждой партиции осуществлять следующую операцию: ребилдить по одной партиции ind2, после чего дропать ( т.е. делать эту же партицию unusable ) у ind. Таким образом, в любой момент для любой партиции будет хотя бы один рабочий индекс.не поможет, если бинд используется для partition pruning. Так что только если используете литералы.
...
Рейтинг: 0 / 0
02.07.2018, 11:49
    #39668228
Valergrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Parallel_degree для индексов и их ребилд
xtenderValergrad2. Далее по каждой партиции осуществлять следующую операцию: ребилдить по одной партиции ind2, после чего дропать ( т.е. делать эту же партицию unusable ) у ind. Таким образом, в любой момент для любой партиции будет хотя бы один рабочий индекс.не поможет, если бинд используется для partition pruning. Так что только если используете литералы.

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


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