|
|
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
Доброе время суток. Подскажите, пожалуйста, по следующей проблеме. Есть большая таблица, в которую добавляется несколько десятков миллионов записей каждый день (каждый день создается новая субпартиция), на текущий момент в ней содержится более десяти миллиардов записей. Потребовалось добавить новое поле в данную таблицу, которое будет заполняться в очень редких случаях (несколько сотен значений за день) и создать функциональный индекс по данному полю (только для заполненных значений данного поля). Проблема в том, что данный индекс (даже с опцией parallel) будет создаваться несколько часов, т.к. нужно обойти всю таблицу. Но в данном случае обход таблицы это бесполезное занятие, т.к. новое поле я добавил предыдущей командой и оно пустое для всей таблицы, т.е. и без обхода таблицы очевидно, что в индексе не будет значений. Может быть есть какие-то шаманские способы быстрого создания такого индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 12:25 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
https://docs.oracle.com/database/121/VLDBG/GUID-256BA7EE-BF49-42DE-9B38-CD2480A73129.htm#VLDBG14102 Одного не понял - для зачем функциональный-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 12:46 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, спасибо ответ. Извиняюсь, забыл упомянуть, что используем версию оракла 11.2.0.4, а на 12-м думаю, что предложенное вами решение помогло бы. Функциональный индекс нужен из-за того, что в индексе должно быть еще и другое поле, которое заполнено для всех строк таблицы. Поэтому, чтобы в индекс попали только необходимые мне строки, нужно условие для индексации. Индекс создается примерно так: Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 13:43 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
Андрей_7777Индекс создается примерно так ...глобальный индекс на 10 посуточно-секционированных ярдов... Надеюсь, Вы понимаете что делаете. По построению индекса на 11g - дабы сократить простой, стройте его online, и НЕ с клиента - либо плюсом локально на сервере БД, либо оракловым заданием. https://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm#ADMIN11729 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 14:18 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, спасибо. > ...глобальный индекс на 10 посуточно-секционированных ярдов... Надеюсь, Вы понимаете что делаете. В чем Ваши сомнения? Строк с заполненными значениями нового поля будет очень мало, лишь несколько сотен в день, поэтому глобальный индекс будет совсем небольшого размера. На время вставки новых записей в таблицу это существенно не должно сказаться, т.к. обновлений нового индекса будет очень мало. А транкейт субпартиции у меня выполняется с опцией: Код: plsql 1. Что вроде бы тоже должно не на много замедлить данную операцию. Или я что-то не понимаю? Еще поясните, пожалуйста, почему Вы рекомендуете создавать индекс не с локальной машины, а на сервере. Это как-то повлияет на время время создания индекса? Или таким образом я застрахован от случайного разрыва соединения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2018, 18:35 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
Андрей_7777Еще поясните, пожалуйста, почему Вы рекомендуете создавать индекс не с локальной машины, а на сервере. Это как-то повлияет на время время создания индекса? Или таким образом я застрахован от случайного разрыва соединения?Наверное, это связано с некоторыми багами (придуманными или настоящими, сейчас уже и никто и не вспомнит, но таки страшно), что прерывание создания ONLINE индекса может повредить данные Я бы еще напомнил, что есть смысл установить параметр DDL_LOCK_TIMEOUT -- а то обидно после многочасового построения получить отлуп по блокировке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 05:13 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
Андрей_7777, А почему вы не вынесете это поле в отдельную таблицу с общим ПК с основной таблицей? У нее и размер будет крохотный, и индекс создастся моментально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 13:09 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
miksoft, Создать вспомогательную таблицу можно, но REFERENCE на основную таблицу будет мешать, т.к. транкейт субпартиции основной таблицы невозможен с референсами на нее. Поэтому перед транкейтом нужно будет отключать этот референс, а после включать. В будущем нужно будет помнить, что одно поле основной таблицы лежит в другой вспомогательной таблице. На мой взгляд все это ведет к усложнению дальнейшего сопровождения основной таблицы. Вспомогательная таблица это и есть аналог моего индекса, только в данном случае мне добавится работа по его сопровождению, а плюсов от этого я не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 18:07 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
Андрей_7777REFERENCE на основную таблицу будет мешатьну так не делайте его. Андрей_7777плюсов от этого я не вижу.Не нужно создавать индекс на 10 миллиардах записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 19:09 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
miksoft, miksoft> Не нужно создавать индекс на 10 миллиардах записей Почему? Этот индекс функциональный, в нем будут записи только для строк у которых заполнено новое поле, т.е. индекс будет совсем небольшой. Какие минусы от создания этого индекса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 19:25 |
|
||
|
Быстрое создание пустого индекса
|
|||
|---|---|---|---|
|
#18+
Андрей_7777Какие минусы от создания этого индекса?Андрей_7777Проблема в том, что данный индекс (даже с опцией parallel) будет создаваться несколько часов, т.к. нужно обойти всю таблицу. В общем, я не настаиваю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2018, 20:10 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39710282&tid=1883396]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 420ms |

| 0 / 0 |
