powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Параллелим запрос
11 сообщений из 11, страница 1 из 1
Параллелим запрос
    #39263647
ParallelQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запроса вида
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
select ... from ...
union all
select ... from tab1...
union all
select ... from tab2...
union all
select ... from tab3...
union all
select ... from tab4...
union all
select ... from tab5...
union all
select ... from tab6...
...


Каждый селект по отдельности выполняется от 1-5 секунд, все вместе выполняются в районе минуты (это долго)
Можно ли распараллелить запрос, разбив на части именно по union all-ам (в надежде, что будет немного быстрее)?
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263653
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
google ?

https://docs.oracle.com/database/121/VLDBG/GUID-1F4C90F9-3EF5-423A-B55B-2593FB3F1433.htm

Не факт, что параллельно будет в N-раз быстрее. Если все "стоит колом" на обращение к дискам, то от параллелности/последовательности разницы не будет.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263666
ParallelQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid KudryavtsevНе факт, что параллельно будет в N-раз быстрее. Если все "стоит колом" на обращение к дискам, то от параллелности/последовательности разницы не будет.
Понятно, что не факт, и скорее всего, что не будет, но надо попробовать )
В 11.2 PQ_CONCURRENT_UNION не канает похоже.
Найти бы пример или суть, как распараллелить через pipeline-функции (если это возможно, не используя scheduler и job-ы).
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263669
ParallelQКаждый селект по отдельности выполняется от 1-5 секундэто до первого фетча или возврат полного набора итоговых данных?
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263672
ParallelQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эхэто до первого фетча или возврат полного набора итоговых данных?
Полный набор.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263673
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParallelQ,

tab1 ... tab6 - это просто таблицы или запросы с условиями where?
Если второе, что оптимизатор любит искать в таких unionах одинаковые условия в where и выность их наружу из union.
Что, разумеется, ломает планы внутренних запросов.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263682
pihel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ParallelQ,


ParallelQНайти бы пример или суть, как распараллелить через pipeline-функции (если это возможно, не используя scheduler и job-ы).

Распараллельте физически любым из способов: периодическое асинхронное выполнение набора процедур
Внутрях там, правда, все равно джобы.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263710
ParallelQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Egoроптимизатор любит искать в таких unionах одинаковые условия в where и выность их наружу из union.
Запросы с условиями, но по плану вроде ничего не выносит.
pihelРаспараллельте физически любым из способов
Спасибо, видел, но во-первых, не понял механизм, во-вторых, предположим, делаю несколько pipeline.
Не пойму как потом собрать их результат в кучу и вообще как получить результат.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263724
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParallelQ,

Можно сделать пипелин, который запускает несколько процессов и ожидает от них данные через pipe или aq. Плюс, контролирует завершение всех процессов через тот же механизм.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263727
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ParallelQЗапросы с условиями, но по плану вроде ничего не выносит. я тоже так думал пока не наткнулся. Такое
Код: plsql
1.
select ... where type_id = 3 union all select ... where type_id <> 3 

пришлось написать так
Код: plsql
1.
select ... where type_id = 3 union all select ... where case type_id when 3 then 1 else 0 end = 0 

Планы Oracle при этом тоже рисовал замечательные.
pihel... как потом собрать их результат в кучу и вообще как получить результат. Зависит от того, что потом нужно делать с результатом. Можно, например, сложить в промежуточную таблицу.
...
Рейтинг: 0 / 0
Параллелим запрос
    #39263747
ParallelQ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
EgoрЗависит от того, что потом нужно делать с результатом. Можно, например, сложить в промежуточную таблицу.
Придется юзать постоянную таблицу с генерацией уникальных id запросов и т.д., что вряд ли будет сильно эффективнее,
а во временные складывать в других потоках смысла нет, не увидишь потом, так ведь?
И самое главное - dml-ить нельзя - т.к. обращение к функции, где этот запрос идет как
Код: plsql
1.
select * from table(myfunction)


-2-Можно сделать пипелин, который запускает несколько процессов и ожидает от них данные через pipe или aq. Плюс, контролирует завершение всех процессов через тот же механизм.
Не знаю прокатит ли, посмотрю пайп, хотя запускать-то все равно через джобы...
Видимо, пока без вариантов.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Параллелим запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]