Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Update non-index column in table with context index  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
Как быстро проапдейтить не индексированное поле в таблице, в которой есть тяжелый контекстный индекс 'sync on (commit)'?

При попытке это сделать выполнение очень медленное, я так понимаю перестраивается контекстный индекс, хотя его значение не изменяется. В longops показывает, что апдейт будет длиться несколько суток (что странно, имхо sync on(commit) вроде означает перестройку индекса при коммите), хотя самих строк в таблице относительно не много, и без контекстного индекса выполняется очень быстро.

База рабочая, желательно сделать на лету. Но если останавливать приложение, для обеспечения консистентсности, то совсем не надолго - перестройка индекса не вариант.
29 май 17, 12:25    [20519661]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
Перестройка индекса при коммите миф - при коммите запускается хранимка, которая по-факту и индексирует. Я считаю, надо поставить sync on request, проапдейтить, сделать ручной синк с паралелью 16 например.
29 май 17, 12:42    [20519710]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
Shtock
Я считаю, надо поставить sync on request, проапдейтить, сделать ручной синк с паралелью 16 например.

Как изменить sync, по моему он задается только при создании контекстного индекса?
29 май 17, 12:48    [20519730]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
publexus
Как изменить sync, по моему он задается только при создании контекстного индекса?


exec CTX_DDL.REPLACE_INDEX_METADATA('INDEX_NAME','REPLACE METADATA SYNC(manual)');
29 май 17, 13:05    [20519804]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
именно :)
29 май 17, 13:12    [20519831]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
но я бы использовал ALTER INDEX index_name PARAMETERS (paramstring) чтобы поменять ровно 1 параметр
29 май 17, 13:13    [20519835]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
важно что - то, что эта процедура меняет ВСЕ метадата, т.е. например если был задан itab, то она и его поменяет, поэтому с этой процедурой надо быть очень аккуратным.
29 май 17, 13:15    [20519842]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
Shtock
Я считаю, надо поставить sync on request, проапдейтить, сделать ручной синк с паралелью 16 например.


Не помогло. Есть еще триггер, но внутри условие по updating("COLUMN"). В таблице всего 150 000 строк.

При запуске апдейта скорость падает геометрически, судя по longops: 1% проходит за 3 секунды, 2% - 15 сек, 3% - 1мин., и т.д. Когда ставил на выходные, он прошел только четверть, и прогнозировал время полного выполнения - 10+ суток.
29 май 17, 13:31    [20519906]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
я не думаю, что дело в полнотекстовом индексе. Есть очень простой способ проверить. Посмотри меняется ли кол-во записей в DR$ таблицах, которые относятся к этому индексу. Если кол-во в них не меняется, то дело не в нём.
29 май 17, 13:49    [20519957]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Nobody1111
Guest
publexus
Shtock
Я считаю, надо поставить sync on request, проапдейтить, сделать ручной синк с паралелью 16 например.


Не помогло. Есть еще триггер, но внутри условие по updating("COLUMN"). В таблице всего 150 000 строк.

При запуске апдейта скорость падает геометрически, судя по longops: 1% проходит за 3 секунды, 2% - 15 сек, 3% - 1мин., и т.д. Когда ставил на выходные, он прошел только четверть, и прогнозировал время полного выполнения - 10+ суток.


что этот триггер делает?

Основная идея будет, наиболее вероятно, примерно та же. Временно отключить, или модифицировать триггер, чтобы он не мешал обновлению, а затем сделать то, что он должен сделать, за один заход. Или вообще не делать, если без этого можно обойтись. После этого восстановить триггер в исходное состояние.
29 май 17, 14:29    [20520108]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
publexus
Member

Откуда: Москва
Сообщений: 955
Nobody1111
Основная идея будет, наиболее вероятно, примерно та же. Временно отключить, или модифицировать триггер, чтобы он не мешал обновлению, а затем сделать то, что он должен сделать, за один заход. Или вообще не делать, если без этого можно обойтись. После этого восстановить триггер в исходное состояние.


Так и пришлось делать: остановить приложение, удалить триггер, проапдейтить таблицу, восстановить триггер, запустить приложение.
На все ушло пару минут.

Не понимаю, почему с триггером так медленно выполнялось. В триггере условие update() по конкретному полю типа clob, поэтому он запускался, но по сути ничего не делал. Может быть потому, что в теле триггера присутствовала локальная переменная типа xmltype, но она декларировалась внутри блока if-then и не должна была создаваться если нужный clob не изменялся.
30 май 17, 12:50    [20522997]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
Shtock
Member

Откуда: СПб
Сообщений: 3049
А зачем удалять триггер, если можно задизаблить?
30 май 17, 14:39    [20523596]     Ответить | Цитировать Сообщить модератору
 Re: Update non-index column in table with context index  [new]
цпу
Guest
Shtock
А зачем удалять триггер, если можно задизаблить?

удалять всегда приятней
30 май 17, 15:20    [20523918]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить