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

Откуда:
Сообщений: 575
делаю 2 одинаковых запроса с разницей только в дате
WITH T1 AS
(SELECT * FROM SOURCE WHERE DT BETWEEN D1 AND D2)
,
T2 AS
(SELECT * FROM SOURCE WHERE DT BETWEEN D3 AND D4)
SELECT * FROM T1
UNION ALL
SELECT * FROM T2

Каждый по отдельности запрос выполняется за 2 мин, но если стоит UNION ALL - то этот общий запрос висит часами
Диапазон дат входит в 1 определенную партицию
Подскажите почему так происходит. План выполнения запроса предоставить не могу к сожаленью
15 фев 17, 13:46    [20214014]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
ORA__SQL
Member

Откуда: Moscow
Сообщений: 1758
WITH T1 AS
(SELECT rownum, t1.* FROM SOURCE t1 WHERE t1.DT BETWEEN D1 AND D2)
,
T2 AS
(SELECT rownum, t2.* FROM SOURCE t2 WHERE t2.DT BETWEEN D3 AND D4)
SELECT * FROM T1
UNION ALL
SELECT * FROM T2
15 фев 17, 15:57    [20214595]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
Lary Denis
Guest
abort,

select * from source where dt between d1 and d2 or dt between d3 and d4
15 фев 17, 16:37    [20214777]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
Добрый Э - Эх
Guest
abort
Подскажите почему так происходит. План выполнения запроса предоставить не могу к сожаленью
даже с планом не всегда понятны причины затупов оптимизатора. а без планов вообще гадание на кофейной гуще в хрустальном шаре получается...
15 фев 17, 17:37    [20215057]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
Добрый Э - Эх
Guest
abort
...
Каждый по отдельности запрос выполняется за 2 мин, но если стоит UNION ALL - то этот общий запрос висит часами
...
Подскажите почему так происходит...
Как один из вероятных вариантов - оптимизатор "подумал", что из-за многократного обращения в основной секции запроса к WITH-подзапросам, будет лучше сделать "материализацию" результатов запросов T1 [и | или] T2 во временные таблицы...
Раз уж планы показать нам не можешь, то посмотри сам - не появился ли в плане запроса с UNION ALL шаг "TEMP TABLE TRANSFORMATION". Если такой шаг есть в плане - попробуй убедить оптимизатор не делать материализации посредством хинта online:

WITH T1 AS
(
 SELECT /*+ inline*/ * 
   FROM SOURCE WHERE DT BETWEEN D1 AND D2)
,
T2 AS
(
 SELECT /*+ inline*/ * 
   FROM SOURCE WHERE DT BETWEEN D3 AND D4)
SELECT * FROM T1
UNION ALL
SELECT * FROM T2
16 фев 17, 13:07    [20217461]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
abort
Member

Откуда:
Сообщений: 575
Добрый Э - Эх,

вот приложил план

К сообщению приложен файл. Размер - 58Kb
16 фев 17, 14:04    [20217750]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4760
abort,

В первом плане у тебя применятся bloom filter для sub-partitions, а во втором используется индексный доступ.
Теперь покажи планы для запросов по отдельности.
Независимо от вышесказанного, partition range all для соединяемой таблицы выглядит подозрительно. Полагаю от этого можной уйти.
16 фев 17, 15:19    [20218076]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
booby
Member

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

видимо, все дело в том, что приключился join factorizaton

https://blogs.oracle.com/optimizer/entry/optimizer_transformations_join_factorization

и тебе надо радоваться от того, что два запроса за один раз выполнились гораздо умнее,
чем выполнялись два раза по одному запросу.

Положено испытать счастье и чувство глубокой благодарности к создателю за дары его
мудрости.
16 фев 17, 17:15    [20218694]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
abort
Member

Откуда:
Сообщений: 575


К сообщению приложен файл. Размер - 42Kb
17 фев 17, 08:44    [20219995]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
abort
Member

Откуда:
Сообщений: 575
Это один из запросов, который обращается к одному интервалу дат
17 фев 17, 08:45    [20219997]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4760
abort
Это один из запросов, который обращается к одному интервалу дат
Все чудесатее и чудесатее.
Короче ответ на изначальный вопрос
abort
Подскажите почему так происходит.
Query transformations.
А более конкретный ответ ты все равно не поймешь, да и вообще вся эта дискуссия больше похожа на клоунаду.
17 фев 17, 08:57    [20220025]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
abort
Member

Откуда:
Сообщений: 575
В опщем я понял что оптимизатору в голову придет то и будет.
Может хинты помогут?
17 фев 17, 09:15    [20220063]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4760
abort,

Есть много методов, но обязательно наличие мозга и умения читать и думать. Сорри.
Ты мог бы начать с ответа ORA__SQL, но чукча, походу, не читатель.
17 фев 17, 09:57    [20220139]     Ответить | Цитировать Сообщить модератору
 Re: Почему UNION ALL тормозит  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2727
abort
В опщем я понял что оптимизатору в голову придет то и будет

Ну, вообще-то, с этим не поспоришь )
17 фев 17, 13:02    [20220965]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить