Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Затормозил запрос со вставкой во временную таблицу  [new]
ddelete
Member

Откуда:
Сообщений: 203
Есть отчет.Он формируется по следующему алгоритму: заполянются поочередно несколько временных таблиц...конечные данные, это вьюха натянутая на последнюю временную таблицу.

с некоторых пор отчет нереально затормозил..если ранее за месяц он формировался примерно 10 мин, то сейчас час и больше :(
собрал статистику по таблицам использующимся в этих запросах. Не помогло :(

начал разбирать..все до последней временной таблицы заполняются секунды..последняя очень долго....расчленил запрос который ее наполняет..запрос отрабатывает мгновенно. около секунды...план красивейший..но вот вставка во временную таблицу очень долго...помотрел...а там вставляется около 600 тыс записей

вопрос: что можно сделать ? :) может какие нибудь индексы или ключи на временную таблицу приделать..может какие то ее настройки подкрутить...подскажите...
15 май 07, 13:07    [4138645]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
Alexus12
Member

Откуда:
Сообщений: 2868
автор
индексы или ключи на временную таблицу приделать

это только затормозит ВСТАВКУ
переделывайте алгоритм (группируйте - вряд ли в ваш отчет все строки живьем идут)
15 май 07, 13:22    [4138768]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
ddelete
Member

Откуда:
Сообщений: 203
алгоритм особо переделать сейчас не смогу...т.к. на этом движке работают ВСЕ бухгалтерские отчеты....поэтому хотелось бы как то ускорить именно вставку этой огромной толпы строк :) в других отчетах, просто условия формирования другие и поэтому количество вставляемых данных меньше.
15 май 07, 14:04    [4139077]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
db-man
Guest
Временная таблица - она по-честному temporary или же обычная?
Как её очищаете (если она обычная)?
insert /*+ APPEND */ пробовали?
15 май 07, 14:07    [4139097]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
ddelete
Member

Откуда:
Сообщений: 203
2 db-man:

временная по честному :)
не пробовал...щас попробуем, может чего нибудь и выйдет :)
15 май 07, 14:09    [4139109]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
dmidek
Member

Откуда: Киев - Дортмунд
Сообщений: 116175
ИМХО

Временная таблица с 600000 записями нежизнеспособна.
Сделайте обычную ...
15 май 07, 14:12    [4139125]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
ddelete
Member

Откуда:
Сообщений: 203
/*+ APPEND */ - не помог :(
сделал таблицу не временной - то же не помогло....
15 май 07, 14:35    [4139295]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
db-man
Guest
план красивейший..

Как узнали? :)
Красивейший - потому что нет FULL SCAN и HASH JOIN? :)

Попробуйте в sqlplus сделать:

set autotrace traceonly

и потом выполните запрос, которым заполняется темп табличка.
Сколько он будет выполняться?
15 май 07, 14:44    [4139350]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
ddelete
/*+ APPEND */ - не помог :(
INSERT VALUES или INSERT SELECT?
15 май 07, 15:09    [4139483]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
EvilThatManDo
Member

Откуда: Балашиха
Сообщений: 3
А FORALL ... INSERT юзать не пробовали??
15 май 07, 15:14    [4139507]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
ddelete
Member

Откуда:
Сообщений: 203
2 Jannny

insert /*+APPEND*/ into (...) select ...

2 db-man

угу :) именно такой был критерий красоты :)
сейчас потрейсю так как вы предложили
15 май 07, 15:17    [4139518]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
db-man
Guest
именно такой был критерий красоты :)

Это неправильный критерий.
15 май 07, 15:25    [4139566]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
никогда не понимал идеи пихать 600тыс. во временную таблицу.
Это что-то из мира MSSQL, в oracle так ничего съэкономить не получится, а дополнительные затраты, как говорится, на лице.
15 май 07, 15:29    [4139592]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
ddelete
Member

Откуда:
Сообщений: 203
ну что ж делать, то ?

развернул все в один монстро образный запрос..без временных таблиц и вьюх...
получил вот такой план
с хинтом /*+rule*/
SELECT STATEMENT   
  SORT ORDER BY  
    FILTER   
      SORT GROUP BY  
        NESTED LOOPS OUTER  
          TABLE ACCESS BY INDEX ROWID SYNTHACCOUNT 
            INDEX UNIQUE SCAN PK_SYNTHACCOUNT 
          NESTED LOOPS   
            TABLE ACCESS BY INDEX ROWID BUHACCOUNT 
              INDEX UNIQUE SCAN PK_BUHACCOUNT 
            VIEW   
              SORT GROUP BY  
                VIEW   
                  UNION-ALL   
                    FILTER   
                      TABLE ACCESS FULL TMP_BUHSALDO 
                      FILTER   
                        TABLE ACCESS BY INDEX ROWID DOCBUH 
                          NESTED LOOPS   
                            TABLE ACCESS BY INDEX ROWID DOC 
                              INDEX RANGE SCAN IDX_DOC_BRANCH 
                            INDEX RANGE SCAN FK_DOCBUH_DOC 
                    CONCATENATION   
                      NESTED LOOPS   
                        NESTED LOOPS   
                          NESTED LOOPS   
                            TABLE ACCESS BY INDEX ROWID DOC 
                              INDEX RANGE SCAN IDX_DOC_BRANCH 
                            TABLE ACCESS BY INDEX ROWID DOCBUH 
                              INDEX RANGE SCAN FK_DOCBUH_DOC 
                          TABLE ACCESS BY INDEX ROWID TMP_BUHSALDO 
                            INDEX RANGE SCAN IDX_TMP_BUHSALDO_BUHACCOUNT 
                        TABLE ACCESS BY INDEX ROWID TMP_BUHACCOUNT 
                          INDEX UNIQUE SCAN PK_TMP_BUHACCOUNT 
                      NESTED LOOPS   
                        NESTED LOOPS   
                          NESTED LOOPS   
                            TABLE ACCESS BY INDEX ROWID DOC 
                              INDEX RANGE SCAN IDX_DOC_BRANCH 
                            TABLE ACCESS BY INDEX ROWID DOCBUH 
                              INDEX RANGE SCAN FK_DOCBUH_DOC 
                          TABLE ACCESS BY INDEX ROWID TMP_BUHSALDO 
                            INDEX RANGE SCAN IDX_TMP_BUHSALDO_BUHACCOUNT 
                        TABLE ACCESS BY INDEX ROWID TMP_BUHACCOUNT 
                          INDEX UNIQUE SCAN PK_TMP_BUHACCOUNT 
и оно вообще перестало выдавать какие либо результаты..минут через 5-10 после старта выбивает ошибку

ORA-01555: snapshot too old: roollback segment number ......... too small
16 май 07, 15:25    [4145099]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
ddelete
ну что ж делать, то ?

Что-что... UNDO увеличить, запрос - оптимизировать.
Почему именно RULE? Чем не устраивает CBO?
23 май 07, 15:46    [4175563]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
Змей Равниныч
Member

Откуда: Из тридевятого царства
Сообщений: 284
andrey_anonymous
никогда не понимал идеи пихать 600тыс. во временную таблицу.
Это что-то из мира MSSQL, в oracle так ничего съэкономить не получится, а дополнительные затраты, как говорится, на лице.
Бывают, однако, случаи, бывают. Иногда приходится.
23 май 07, 16:27    [4175912]     Ответить | Цитировать Сообщить модератору
 Re: Затормозил запрос со вставкой во временную таблицу  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18351
Змей Равниныч
Иногда приходится.

IMHO данный случай к таковым, вероятнее всего, не относится.
23 май 07, 17:47    [4176624]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить