ETL Data Warehouse, оптимизация цикла

Всем доброго времени суток.

Есть

ETL

цикл содержащий фазы (диаграмма в аттаче).

Существует несколько типов фаз.

Некоторые из них поддаются распараллеливанию непосредственно (загрузка по http).

Все типы фаз можно запускать на параллельное выполнение.

Фазы зависят друг от друга.

Алгоритм использую следующий:

Создаю пул c ограничениями для каждого типа

(сколько фаз данного типа может выполняться одновременно):

HttpDownload - 1

SqlStoredProcedure - 2

итд

start:

Получаю фазы, у которых удовлетворены или отсутствуют зависимости.

Если их нет - goto end

Если есть место в пуле - помещаю на выполнение.

Жду пока выполниться хотя бы фаза из пула

Убираю ее из пула

goto start

end:

Некоторые фазы выполняются по 1,5 часов.

На данный момент использую следующий алгоритм по приоритету:

Чем больше фаза удовлетворит зависимостей (откроет дорогу к бОльшему количеству фаз, которые, возможно, можно будет выполнить параллельно), тем скорее она должна быть выполнена.

Считаю, что этого достаточно, однако, думаю о том, чтобы кроме этого использовать оценку времени выполнения цепочки фаз.

То есть сначала фазы будут отсортированы по количеству зависимостей которые они удовлетворяют, потом еще

по "весу" цепочки которую они порождают.

Буду рад любым идеям и советам. Задача -

максимально быстро выполнить цикл

.