powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как создать индекс на очень большой таблице.
19 сообщений из 19, страница 1 из 1
Как создать индекс на очень большой таблице.
    #34073750
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется мегаогромная таблица (сотни миллиардов строк).
Таблица партиционирована (около 60 мил. строк в партиции). По таблице построены локально секционированные индексы.

Вдруг выясняется, что надо построить еще один локально секциониованный индекс.

Если делать по простому CREATE INDEX ..., то вываливается по ORA-01555.

Решать проблему надо было быстро, и я:
1. переименовал таблицу.
2. Построил пустую партиционированную таблицу с нужным набором индексов.
3. Организовал переливку "по партициям"
loop
insert into <table1>
select * from <table_2> partition <part_name>;
commit;
end loop;

Работает, но медленно. (За три дня перенесено около 8-10 %% всех записей)

Хочу подстраховаться "на будующее". Какие еще возможны способы создания индекса по такой огромной таблице?
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34073808
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не пробовал на таких объемах, но вроде должен помочь partition exchange.
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34073825
Maxifly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
partition exchange:

т.е. пункты 1 и 2 моих действий оставляем , а п 3. переписываем с использованием partition exchange?
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34073846
VicZai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если как вариант
1. Переименовать старую
2. Создать как надо новую
3. Эспортнуть старую (если 10 то expdp)
4. Залить дамп в новую
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34073901
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxiflypartition exchange:

т.е. пункты 1 и 2 моих действий оставляем , а п 3. переписываем с использованием partition exchange?

это при отсутствии глобальных индексов

Можно попробовать так
1. приложению сказать skip_unusable_indexes
2. create index unusable
3. rebuild по партициям
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34073970
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VicZai4. Залить дамп в новую
Думаю, будет очень долго. Создать индекс над готовыми данными - намного быстрее, нежели заливать данные, попутно индексируя.
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34073988
decode!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если так:
1)Создать специальный сегмент отката(если не в AUTO режиме) большого размера
2)set transaction use rollback segment large_rb;
2)create index on ... nologging;
3)alter index .... logging;
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074001
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
decode!А если так:
Думаю, после предложения DBA вряд ли стоит обсуждать другие варианты.
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074015
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
имхо, так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table aemp 
partition by list (deptno)
(
  partition p1 values ( 10 )
 ,partition p2 values ( 20 , 30 , 40 )
)as (select * from scott.emp);

create index i0001 on aemp(ename,hiredate) UNUSABLE LOCAL;
alter index i0001 rebuild partition p1;
alter index i0001 rebuild partition p2;
..
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074031
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кхе - припоздал я ,однако..
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074036
decode!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В чём суть create... UNUSABLE? Создаётся только определение индекса, а сам индекс нет?
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074046
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
decode!В чём суть create... UNUSABLE? Создаётся только определение индекса, а сам индекс нет?
создается только пустой корневой блок индекса
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074254
decode!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вернуть из UNUSABLE в USABLE не нужно?
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074314
Фотография BW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
decode!А вернуть из UNUSABLE в USABLE не нужно?

REBUILD вернет в USABLE.

С уважением,
bw.
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #34074327
decode!
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
риспект!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как создать индекс на очень большой таблице.
    #35120377
tempero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish, спасибо огроменное... чтож я раньше не увидел эту темку =)
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #35120689
G.M.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А кляуза PARALLEL тут не поможет ли?
...
Рейтинг: 0 / 0
Как создать индекс на очень большой таблице.
    #35121453
Vlad_2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после создания индексов с unusable, очень удобно использование dbms_pclxutil.build_part_index...
детали смотри в документации.
Классная вещь для локальных индексов
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как создать индекс на очень большой таблице.
    #39385478
tester99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне удалось добиться ускорения с помощью:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create index SIEBEL.S_PER_COMM_ADDR_II on SIEBEL.S_PER_COMM_ADDR (INTEGRATION_ID)
  tablespace SIEBEL_INDEX
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  )  nologging parallel 4 online;

alter index SIEBEL.S_PER_COMM_ADDR_II logging noparallel;
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как создать индекс на очень большой таблице.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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