Как рассчитать больший объем данных за то же время ? Увеличить скорость расчета ? Как заставить PL-SQL задействовать все свободные процессорные мощности ? . Для всех этих вопросов есть только один ответ – нужно использовать возможности параллельного исполнения . Для этого есть несколько возможностей – в запросах на выборку данных (select) использовать подсказки оптимизатору(hint) для распараллеливания запроса (/*+ FULL(hr_emp) PARALLEL(hr_emp, DEFAULT,DEFAULT) */).
Второй способ, это параллелить исполнение PL_SQL программы из внешнего вызова, средствами операционной системы. Тогда алгоритм работы чуть усложняется – вначале вызываем несколько потоков для расчета единого результата, затем забираем рассчитанные данные.
Третий способ (10g), когда требуется выполнять задачу едино за один шаг – это использование менеджера заданий (DBMS_SCHEDULER.CREATE_JOB) для одновременного запуска нескольких расчетов. По сравнению с предыдущим способом, данный инструмент имеет следующие преимущества
(Для 11-ой версии нужно использовать DBMS_PARALLEL_EXECUTE.)
1) «Клиент» ничего не должен знать о реализованном параллелизме
2) Данные возвращаются по мере расчета, а не скопом в конце процедуры
Об этом и пойдет речь далее (..в продолжении темы PL-SQL расчетов в Essbase).
Continue reading “PL-SQL paralleling execution 10g”