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

Откуда:
Сообщений: 998
Есть у меня процедура, в которой используется очень сложный запрос, сложный в плане кучи джойнов, условий вместе с UNION ALL и так далее.
В процедуре результаты селекта в чистом виде вставляются в некоторую таблицу, где и строк-то особо нет и индексов тоже нет.

Если этот селект запустить через
create table tb as
select ...
то он работает за 6 минут.
Если просто запустить селект - тоже выведет данные за 6 минут.
Но в процедуре вставка данных в таблицу выполняются бесконечно долго, днями (ни разу не дождался выполнения.
В чем может быть причина?
Куда копать?
18 мар 15, 15:03    [17400008]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Albatross,

10:1 - причина это руки (т.е. - в пошлых ошибках)
ну, попробуйте в процедуре засунуть результат запроса в коллекцию из которой отдельным шагом делайте вставку
18 мар 15, 15:10    [17400081]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
Albatross
Member

Откуда:
Сообщений: 998
orawish,

да мне чисто в теории интересно.
Запрос не мой, изучать я его не хочу - это неделю потратить.

По теме - убрал UNION ALL в запросе, разбил на два последовательных INSERT, всё отработало за 14 минут.
18 мар 15, 15:26    [17400209]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
varlamovvp
Member

Откуда: Moscow
Сообщений: 298
Albatross,

лучше неделю потратить сейчас, потом оно легче будет ...

так рождаются костыли
через год очередной разработчик сложит запросы через UNION ALL :)
18 мар 15, 15:30    [17400259]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
Albatross
Member

Откуда:
Сообщений: 998
varlamovvp
Albatross,

лучше неделю потратить сейчас, потом оно легче будет ...

так рождаются костыли
через год очередной разработчик сложит запросы через UNION ALL :)

Это запрос аналитиков а не программистов.
Он занимает 10 экранов убористого текста.
Просто такое уже не в первый раз (вставка происходит в процедуре в сотни раз дольше, чем селект), потому спрашиваю.
18 мар 15, 15:40    [17400359]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Albatross
orawish,

да мне чисто в теории интересно.
Запрос не мой, изучать я его не хочу - это неделю потратить.

По теме - убрал UNION ALL в запросе, разбил на два последовательных INSERT, всё отработало за 14 минут.

чисто на практике ;) такое бывает. обсуждалось неоднократно.
например, от работающего селекта, инсект-селект может и лечь с ora-600
автор
..в процедуре
- отдельная история..

если не докапываться до конкретики причин (а докапываться таки надо - в каждом конкретном случае причины же есть)
,то начинать танцы можно с дробления задачи на шаги
18 мар 15, 15:43    [17400400]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
SergINI
Member

Откуда: Нью-Васюки
Сообщений: 6787
Albatross
Куда копать?

Давай скрипт создания таблицы и про триггеры расскажи.
18 мар 15, 16:40    [17400819]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
Nobody1111
Guest
Albatross
Есть у меня процедура, в которой используется очень сложный запрос, сложный в плане кучи джойнов, условий вместе с UNION ALL и так далее.
В процедуре результаты селекта в чистом виде вставляются в некоторую таблицу, где и строк-то особо нет и индексов тоже нет.

Если этот селект запустить через
create table tb as
select ...
то он работает за 6 минут.
Если просто запустить селект - тоже выведет данные за 6 минут.
Но в процедуре вставка данных в таблицу выполняются бесконечно долго, днями (ни разу не дождался выполнения.
В чем может быть причина?
Куда копать?


CTAS, как правило, использует direct path insert (если получается). А почему днями инсерт идет - это снимаем трассировку с вейтами и изучаем. Тогда можно точно сказать.
21 мар 15, 11:31    [17413334]     Ответить | Цитировать Сообщить модератору
 Re: долгая вставка в таблицу  [new]
Изя Кацман
Member

Откуда: Великий Эксперимент
Сообщений: 2019
Albatross,

Покажи текст процедуры, камрад
В ней от твоей огромной команды SELECT оставь только слово SELECT
Не забудь заюзать теги SPOILER и SRC, чтобы выглядело примерно так:
+ Текст моей процедуры

-- Это моя процедура
CREATE PROCEDURE ...
BEGIN
...
     INSERT INTO ...
     SELECT ...
...
END;

Глядя на ето, нам легче будет тебе помочь
21 мар 15, 13:33    [17413599]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить