2015-01-17 4 views
1

предположим, что процедура A рассчитана на 1000 номеров и требует процедуры B пробег для каждого из этих номеров и процедуры B сделать что-нибудь.
раствор один: процедура A вызова процедура B 1000 раз для чисел
решения буксировать: процедура A сохранить номера в промежуточной таблице, то процедура B читать цифры
решения одна стоимости призывающую процедура B 1000 раз и решение буксировать стоимость вставка 1000 номеров (каждое число в строке) и чтение (выбор) 1000 номеров. Я хочу знать, какая производительность лучше использовать с помощью plsql?Какое решение лучше, чем производительность в oracle?

+2

В принципе, вы рассматриваете возможность использования _queue_ вместо прямого вызова. Очевидно, что у первого есть дополнительные накладные расходы. Но ваш пример не указан: может ли A и B (и несколько экземпляров B) работать параллельно? Как стоимость генерации чисел по сравнению с B? Имеются ли в A и B состояния ожидания, которые можно каким-то образом использовать при параллельном запуске? Как следует вести A и B в случае «отказа»? –

+0

несколько экземпляров B не могут работать параллельно, и я не понял вторую часть вашего вопроса. –

+2

Для вашей «промежуточной таблицы» вы думаете об использовании обычной таблицы, глобальной временной таблицы или таблицы PL/SQL (коллекции)? Накладные расходы были бы разными. –

ответ

1

С вашим примером и учитывая их как опции, я бы выбрал вариант два. Просто, мы наклоняем цикл и вызываем другую процедуру в 1000 раз, а запись и чтение более эффективны. Что касается обслуживания, любой сбой в процедуре B не гарантирует другого запуска в процедуре A, и вы можете просто перезапустить вторую часть.

Смежные вопросы