Как мне преодолеть плохую производительность отладки служб SSIS? - PullRequest
3 голосов
/ 31 октября 2008

Я использую SSIS для синхронизации данных между двумя базами данных. Я использовал SSIS и DTS в прошлом, но я обычно пишу приложение для вещей такого рода (я программист, и мне это становится проще).

В моем пакете я использую задачу SQL, которая возвращает около 15 000 строк. Я подключил это к контейнеру Foreach, и в этом я назначаю значения столбца набора результатов переменным, а затем сопоставляю эти переменные с параметрами, которые передаются в другую задачу SQL.

У меня проблема с отладкой, а не просто с более сложной отладкой, такой как точки останова и оценка значений во время выполнения. Я просто имею в виду, что если я запускаю это с отладкой, а не без, это займет несколько часов. В итоге я переписал процесс в Delphi, и вот что я придумал:

Полный поток данных:
Это извлекает 15 000 строк, обновляет таблицу назначения для каждой строки, затем вытягивает 11 000 строк и обновляет таблицу назначения для каждой строки.

Debugging:
Delphi App: 139 с
SSIS: 4 часа 46 минут

Не отладка:
Приложение Delphi: 132 с
SSIS: 384 с

Обновление данных:
Это тянет 3000 строк, но не требуется никаких обновлений или внесения в таблицу назначения. Затем он извлекает 11 000 строк, но, опять же, не требуется никаких обновлений или внесения в таблицу назначения.

Debugging:
Delphi App: 42 с
SSIS: 1 час 10 минут

Не отладка:
Delphi App: 34 с
SSIS: 205 с

Странно то, что у меня такое ощущение, что большую часть времени, затрачиваемого на отладку, - это просто обновление элементов пользовательского интерфейса в Visual Studio. Если я просматриваю вкладку прогресса, то узел добавляется в дерево для каждой итерации (всего тысяч), и это становится все медленнее и медленнее по мере продвижения процесса. Попытка остановить отладку обычно не работает, поскольку Visual Studio, похоже, зацикливается на обновлении пользовательского интерфейса. Если я проверяю профилировщик для SQL Server, никакая фактическая работа не выполняется. Я не уверен, что машина имеет значение, но она должна быть более чем достойной (четырехъядерный процессор, 4 ГБ оперативной памяти, видеокарта 512 МБ).

Это нормальное поведение? Как я уже говорил, я по профессии программист, поэтому у меня нет проблем с написанием приложения для такого рода вещей (на самом деле, для написания кода приложения требуется гораздо меньше времени, чем для его «отрисовки» в SSIS, но я Я полагаю, что запас будет уменьшаться с увеличением объема работы, выполняемой в SSIS), но я пытаюсь выяснить, где что-то вроде SSIS и DTS могло бы вписаться в мой набор инструментов. Пока что ничто по-настоящему меня не впечатлило. Может быть, я неправильно использую или злоупотребляю SSIS?

Любая помощь будет принята с благодарностью, заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 31 октября 2008

Поток и циклы управления службами SSIS имеют не очень высокую производительность и не предназначены для обработки этих объемов данных. Особенно во время отладки - до и после выполнения каждой задачи отладчик отправляет уведомления процессу конструктора, который обновляет цвета фигур, и это может быть медленным.

Вы можете получить гораздо лучшую производительность, используя поток данных. Поток данных не работает с отдельными строками, он работает с буферами строк - намного быстрее, а отладчик уведомляется только о начале / конце буферов - поэтому его влияние менее заметно.

3 голосов
/ 01 ноября 2008

Служба SSIS не предназначена для выполнения такого foreach. Если вы делаете что-то для каждой входящей строки, вы, вероятно, захотите прочитать их в поток данных, а затем, используя поиск или объединение слиянием, определить, делать ли INSERT (это происходит массово) или объект команды базы данных для нескольких SQL UPDATE. команды (более эффективный вариант - объединить их в промежуточную таблицу и выполнить одно ОБНОВЛЕНИЕ).

В другой типичной ситуации синхронизации вы считываете все данные в промежуточную таблицу и выполняете ОБНОВЛЕНИЕ SQL Server для существующих строк (INNER JOIN) и INSERT для новых строк (LEFT JOIN, rhs IS NULL). Существует также возможность использования связанных серверов, но соединения могут быть медленными, так как все (или многие) данные могут приходить через сеть.

У меня есть пакеты служб SSIS, которые регулярно импортируют 24 миллиона строк, включая обработку преобразования и проверки данных и медленное изменение измерений с использованием компонента TableDifference, и он работает относительно быстро для этого большого объема данных по сравнению с отдельной клиентской программой.

0 голосов
/ 31 октября 2008

Я заметил, что это поведение, у меня был пакет служб SSIS для перемещений, который выполнял где-то около 3 миллионов записей, было невозможно отладить, поскольку он будет работать в течение 3-4 дней.

SSIS по-прежнему такой, как я, я просто не «отлаживаю» SSIS, я запускаю их при работе с полными наборами данных. Если мне нужно отладить, я использую очень маленькие наборы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...