CftClub.ru
Клуб специалистов ЦФТ-Банк

Создание индекса без блокировки таблицы

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Oracle DBA
Предыдущая тема :: Следующая тема  
Автор Сообщение
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПн Апр 19, 2010 08:36   Создание индекса без блокировки таблицы Ответить с цитатой
Полезность: Нет оценки
Задача - создать огромный индекс.
1-ый вариант:
Код:
create index my_idx on my_table (...) ...
Данный вариант блокирует всю таблицу, что парализует работу пользователей.

2-ой вариант:
Код:
create index my_idx on my_table (...) ... online parallel
Здесь добавлены 2 опции: online и parallel. Первая - для возможности параллельной работы пользователей, вторая - для ускорения процесса.

Господа DBA!
Есть ли минусы во втором варианте? Будет ли вспоследствии индекс из варианта 2 отличаться чем-либо в словаре Oracle или в эксплуатации от индекса, построенного по варианту 1?
ГлСП
Профи


Вступление в Клуб: 20.09.2007
СообщениеПн Апр 19, 2010 10:18    Ответить с цитатой
Полезность: Нет оценки
Гм.. может я что-то не так делаю, но когда создаю индексы из администратора проектов, то таблица не блокируется. Делал создание индекса в таблице MAIN_DOCUM
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеПн Апр 19, 2010 10:49    Ответить с цитатой
Полезность: Нет оценки
ГлСП пишет:
Гм.. может я что-то не так делаю, но когда создаю индексы из администратора проектов, то таблица не блокируется. Делал создание индекса в таблице MAIN_DOCUM

Точно? У нас блокируется.
А если поймать стейтмент в момент выполнения, интересно там online будет что ли?
tsktalk
Участник со стажем


Вступление в Клуб: 27.09.2007
СообщениеВт Апр 20, 2010 04:22    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
ГлСП пишет:
Гм.. может я что-то не так делаю, но когда создаю индексы из администратора проектов, то таблица не блокируется. Делал создание индекса в таблице MAIN_DOCUM

Точно? У нас блокируется.
А если поймать стейтмент в момент выполнения, интересно там online будет что ли?


по идее, да и по определению, не должна блокироваться таблица.
фулскан по таблице может быть, да и будет...

ради интереса выполните вот такие действия и кусок трейса покажите
Код:

ALTER SESSION SET EVENTS '10046 trace name context forever, level 12' ;

а тут выполните create index ....

ALTER SESSION SET EVENTS '10046 trace name context off' ;


ну и пример своего создаваемого индекса выложите, если есть такая возможность.
попробуем проверить "от куда ноги растут"
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеВт Апр 20, 2010 08:24    Ответить с цитатой
Полезность: Нет оценки
tsktalk пишет:
по идее, да и по определению, не должна блокироваться таблица

Я, конечно, могу снять трейс, но перед этим процитирую документацию Оракл:
Цитата:
Specify ONLINE to indicate that DML operations on the table will be allowed during creation of the index.

Зачем тогда по Вашему мнению Оракл сделал эту опцию?
Добавлю, что у нас Oracle 9i.
tsktalk
Участник со стажем


Вступление в Клуб: 27.09.2007
СообщениеВт Апр 20, 2010 09:27    Ответить с цитатой
Полезность: 1
timochev пишет:
tsktalk пишет:
по идее, да и по определению, не должна блокироваться таблица

Я, конечно, могу снять трейс, но перед этим процитирую документацию Оракл:
Цитата:
Specify ONLINE to indicate that DML operations on the table will be allowed during creation of the index.

Зачем тогда по Вашему мнению Оракл сделал эту опцию?
Добавлю, что у нас Oracle 9i.


когда пишешь по привычке при создании индекса опцию online
то по прошествии времени забываешь, что она не обязательная.
Smile
да и обычно для таких больших таблиц, делают индексы в технологический перерыв - а там никто не мешается.

минусов не будет ни в том ни в другом случае
просто во втором случае оракл разобет на части табличку и паралельно в N потоков будет ее читать и формировать часть индекса
в конечном итоге все равно оракл соберет все в одну кучу и сохранит у себя в словаре
ну и работает это гораздо быстрее, если позволяет дисковая подсистема и память с процами.
tsktalk
Участник со стажем


Вступление в Клуб: 27.09.2007
СообщениеВт Апр 20, 2010 09:31    Ответить с цитатой
Полезность: Нет оценки
Ну и собственно говоря Вы были правы на создании индекса трейс был бы бесполезен, там бы ничего не увидели, надо пользователей было бы трассировать.
Smile
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеВт Апр 20, 2010 11:22    Ответить с цитатой
Полезность: Нет оценки
Спасибо!
Тогда я делаю это на промышленной базе.
tsktalk
Участник со стажем


Вступление в Клуб: 27.09.2007
СообщениеВт Апр 20, 2010 12:02    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Спасибо!
Тогда я делаю это на промышленной базе.


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

PS: через админ словаря - онлайн индекс не создать - это точно арм не позволяет такого
только ручками, так что создавайте индекс свой ручками - либо табличка и пользователи будут в ступоре.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеВт Апр 20, 2010 13:50    Ответить с цитатой
Полезность: Нет оценки
tsktalk пишет:
PS: через админ словаря - онлайн индекс не создать - это точно арм не позволяет такого
только ручками, так что создавайте индекс свой ручками - либо табличка и пользователи будут в ступоре.

Я так и делаю.
Создаю индекс с точно таким же названием, которое должно быть в словаре ЦФТ. А потом накатывается хранилище с индексом, но индекс уже не строится - подхватывается существующий.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Oracle DBA Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru