2015-11-05 2 views
1

У меня есть пакет SSIS, который я пишу. Внутри цикла foreach есть множество задач. У него есть задача, которую нужно выполнить сначала, но остальное можно выполнить в любом порядке.Насколько обязательным является управление потоком в SSIS?

Предположим, что у меня есть «задача1», которая является первой, которая должна выполняться сначала внутри цикла foreach, а затем все остальное может выполняться всякий раз.

Предположим, что скобка() обозначает контейнер и -> обозначает ограничение приоритета.

Является ли это действительный поток управления, который приведет весь пакет завершается, при заполнении TASK1 первого ?:

foreach(task1 -> SequenceContainer(task2 task3 task4)) 

или я должен указать

foreach ( task2 <- task1 -> task3 
         | 
         v 
         task4    ) 

Кроме того, если это Работает, и у меня есть foreach, чтобы продолжить следующую итерацию при сбое, не будет ли она перейти к следующей итерации сразу после отказа модуля или попытается ли она завершить все до перехода на следующую итерацию?

ответ

2

По моему опыту, SSIS отлично работает без контроля потока, если задачи не зависят от завершения предыдущих задач. Это позволяет системе работать одновременно, что может быть быстрее.

Проблема, которую следует учитывать, заключается в том, что система - это, работающая одновременно. Если ваши задачи касаются одних и тех же таблиц, вы можете столкнуться с взаимоблокировками, ожиданиями транзакций или неожиданными результатами.

+0

А, спасибо большое. Фактически они получают доступ к тем же таблицам, но только с точки зрения вставки. Будет ли это? – Aserian

+0

@Aserian. Вы не должны сталкиваться с проблемами с взаимоблокировками, если вы просто делаете вставки, и нет ничего сложного в работе с таблицей, но несколько параллельных вставок могут блокировать друг друга, так как индексы должны обновляться, а также таблица. Другими словами, это может работать очень хорошо, но вы можете не заметить большого увеличения производительности. Если бы я не видел реальных улучшений, я бы, вероятно, сохранил контроль потока только потому, что это устраняет необходимость думать об этом. –

+0

Спасибо! Если я решит оставить ограничения потока приоритетов и не удалось выполнить один пакет, будет ли foreach считать, что он потерпел неудачу и не выполнил остальные задачи? Или завершить остальные задачи, а затем провалиться? Причина, по которой я хочу оставить управление потоком, заключается в том, что я хочу, чтобы foreach завершил каждый пакет, который он может, независимо от того, сбой или нет. Или есть более простой способ сделать это? – Aserian

1

Контейнер последовательности не будет сообщать о завершении, пока все его дочерние задачи не сообщают о завершении. Если ваши подзадачи действительно независимы, то их одновременное выполнение - это прекрасная идея.

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